diff --git a/config/overlays.mk b/config/overlays.mk index d79e6362a..f47b7da2b 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -22,7 +22,7 @@ ov_SC01_077_MAPFILE := $(ov_SC01_077_OUT).map ov_SC01_077_LD_SCRIPT := $(ov_SC01_077_OUT).ld ov_SC01_077_SPLAT_YAML := config/splat.ov_SC01_077.yaml ov_SC01_077_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_077_jr_8012ACE0.o,tail2.data.o,ov_SC01_077_jr_801380E0.o,tail3.data.o,ov_SC01_077_o0.o,tail4.data.o,ov_SC01_077.o,tail5.data.o,ov_SC01_077_jr_8015444C.o,tail6.data.o,ov_SC01_077_jr_80154C24.o,ov_SC01_077_jr_801588CC.o,tail7.data.o,ov_SC01_077_jr_80159C84.o,tail8.data.o,ov_SC01_077_jr_8015A3C8.o,tail9.data.o,ov_SC01_077_jr_8015AE2C.o,tail10.data.o,ov_SC01_077_jr_8015C32C.o,tail11.data.o,ov_SC01_077_jr_8016AB6C.o,tail12.data.o,ov_SC01_077_jr_801734BC.o,tail13.data.o,ov_SC01_077_jr_80178D40.o,tail14.data.o,ov_SC01_077_jr_8017A4AC.o,tail15.data.o,ov_SC01_077_jr_80182268.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve -build/src/ov_SC01_077/ov_SC01_077.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90 +build/src/ov_SC01_077/ov_SC01_077.o: JTBL_PADS := 0,0,4,0,4,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90,+0xa8 build/src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc build/src/ov_SC01_077/ov_SC01_077_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 build/src/ov_SC01_077/ov_SC01_077_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 @@ -48,7 +48,7 @@ ov_SC01_005_ELF := $(ov_SC01_005_OUT).elf ov_SC01_005_MAPFILE := $(ov_SC01_005_OUT).map ov_SC01_005_LD_SCRIPT := $(ov_SC01_005_OUT).ld ov_SC01_005_SPLAT_YAML := config/splat.ov_SC01_005.yaml -ov_SC01_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_005_jr_8012ACE0.o,tail2.data.o,ov_SC01_005_jr_801380E0.o,tail3.data.o,ov_SC01_005_jr_8013F350.o,tail4.data.o,ov_SC01_005_jr_8013FFD8.o,tail5.data.o,ov_SC01_005_jr_8015444C.o,tail6.data.o,ov_SC01_005_jr_80154C24.o,ov_SC01_005_jr_801588CC.o,tail7.data.o,ov_SC01_005_jr_80159C84.o,tail8.data.o,ov_SC01_005_jr_8015A3C8.o,tail9.data.o,ov_SC01_005_jr_8015AE2C.o,tail10.data.o,ov_SC01_005_jr_8015C32C.o,tail11.data.o,ov_SC01_005_jr_8016AB6C.o,tail12.data.o,ov_SC01_005_jr_801734BC.o,tail13.data.o,ov_SC01_005_jr_80178D40.o,tail14.data.o,ov_SC01_005_jr_8017A4AC.o,tail15.data.o,ov_SC01_005_jr_8017C340.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_005_jr_8012ACE0.o,tail2.data.o,ov_SC01_005_jr_801380E0.o,tail3.data.o,ov_SC01_005_jr_8013F350.o,tail4.data.o,ov_SC01_005_jr_8013FFD8.o,tail5.data.o,ov_SC01_005_jr_80140608.o,tail6.data.o,ov_SC01_005_jr_8015444C.o,tail7.data.o,ov_SC01_005_jr_80154C24.o,ov_SC01_005_jr_801588CC.o,tail8.data.o,ov_SC01_005_jr_80159C84.o,tail9.data.o,ov_SC01_005_jr_8015A3C8.o,tail10.data.o,ov_SC01_005_jr_8015AE2C.o,tail11.data.o,ov_SC01_005_jr_8015C32C.o,tail12.data.o,ov_SC01_005_jr_8016AB6C.o,tail13.data.o,ov_SC01_005_jr_801734BC.o,tail14.data.o,ov_SC01_005_jr_80178D40.o,tail15.data.o,ov_SC01_005_jr_8017A4AC.o,tail16.data.o,ov_SC01_005_jr_8017C340.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_005/ov_SC01_005_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_005/ov_SC01_005_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_005/ov_SC01_005_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -75,7 +75,7 @@ ov_SC01_006_ELF := $(ov_SC01_006_OUT).elf ov_SC01_006_MAPFILE := $(ov_SC01_006_OUT).map ov_SC01_006_LD_SCRIPT := $(ov_SC01_006_OUT).ld ov_SC01_006_SPLAT_YAML := config/splat.ov_SC01_006.yaml -ov_SC01_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_006_jr_8012ACE0.o,tail2.data.o,ov_SC01_006_jr_801380E0.o,tail3.data.o,ov_SC01_006_jr_8013F350.o,tail4.data.o,ov_SC01_006_jr_8013FFD8.o,tail5.data.o,ov_SC01_006_jr_8015444C.o,tail6.data.o,ov_SC01_006_jr_80154C24.o,ov_SC01_006_jr_801588CC.o,tail7.data.o,ov_SC01_006_jr_80159C84.o,tail8.data.o,ov_SC01_006_jr_8015A3C8.o,tail9.data.o,ov_SC01_006_jr_8015AE2C.o,tail10.data.o,ov_SC01_006_jr_8015C32C.o,tail11.data.o,ov_SC01_006_jr_8016AB6C.o,tail12.data.o,ov_SC01_006_jr_801734BC.o,tail13.data.o,ov_SC01_006_jr_80178D40.o,tail14.data.o,ov_SC01_006_jr_8017A4AC.o,tail15.data.o,ov_SC01_006_jr_8017C340.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_006_jr_8012ACE0.o,tail2.data.o,ov_SC01_006_jr_801380E0.o,tail3.data.o,ov_SC01_006_jr_8013F350.o,tail4.data.o,ov_SC01_006_jr_8013FFD8.o,tail5.data.o,ov_SC01_006_jr_80140608.o,tail6.data.o,ov_SC01_006_jr_8015444C.o,tail7.data.o,ov_SC01_006_jr_80154C24.o,ov_SC01_006_jr_801588CC.o,tail8.data.o,ov_SC01_006_jr_80159C84.o,tail9.data.o,ov_SC01_006_jr_8015A3C8.o,tail10.data.o,ov_SC01_006_jr_8015AE2C.o,tail11.data.o,ov_SC01_006_jr_8015C32C.o,tail12.data.o,ov_SC01_006_jr_8016AB6C.o,tail13.data.o,ov_SC01_006_jr_801734BC.o,tail14.data.o,ov_SC01_006_jr_80178D40.o,tail15.data.o,ov_SC01_006_jr_8017A4AC.o,tail16.data.o,ov_SC01_006_jr_8017C340.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_006/ov_SC01_006_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_006/ov_SC01_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_006/ov_SC01_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -102,7 +102,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_jr_8012ACE0.o,tail2.data.o,ov_SC03_001_jr_801380E0.o,tail3.data.o,ov_SC03_001_jr_8013F350.o,tail4.data.o,ov_SC03_001_jr_8013FFD8.o,tail5.data.o,ov_SC03_001_jr_8015444C.o,tail6.data.o,ov_SC03_001_jr_80154C24.o,ov_SC03_001_jr_801588CC.o,tail7.data.o,ov_SC03_001_jr_80159C84.o,tail8.data.o,ov_SC03_001_jr_8015A3C8.o,tail9.data.o,ov_SC03_001_jr_8015AE2C.o,tail10.data.o,ov_SC03_001_jr_8015C32C.o,tail11.data.o,ov_SC03_001_jr_8016AB6C.o,tail12.data.o,ov_SC03_001_jr_801734BC.o,tail13.data.o,ov_SC03_001_jr_80178D40.o,tail14.data.o,ov_SC03_001_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001_jr_8012ACE0.o,tail2.data.o,ov_SC03_001_jr_801380E0.o,tail3.data.o,ov_SC03_001_jr_8013F350.o,tail4.data.o,ov_SC03_001_jr_8013FFD8.o,tail5.data.o,ov_SC03_001_jr_80140608.o,tail6.data.o,ov_SC03_001_jr_8015444C.o,tail7.data.o,ov_SC03_001_jr_80154C24.o,ov_SC03_001_jr_801588CC.o,tail8.data.o,ov_SC03_001_jr_80159C84.o,tail9.data.o,ov_SC03_001_jr_8015A3C8.o,tail10.data.o,ov_SC03_001_jr_8015AE2C.o,tail11.data.o,ov_SC03_001_jr_8015C32C.o,tail12.data.o,ov_SC03_001_jr_8016AB6C.o,tail13.data.o,ov_SC03_001_jr_801734BC.o,tail14.data.o,ov_SC03_001_jr_80178D40.o,tail15.data.o,ov_SC03_001_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_001/ov_SC03_001_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_001/ov_SC03_001_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_001/ov_SC03_001_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -129,7 +129,7 @@ ov_SC01_000_ELF := $(ov_SC01_000_OUT).elf ov_SC01_000_MAPFILE := $(ov_SC01_000_OUT).map ov_SC01_000_LD_SCRIPT := $(ov_SC01_000_OUT).ld ov_SC01_000_SPLAT_YAML := config/splat.ov_SC01_000.yaml -ov_SC01_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_000_jr_8012ACE0.o,tail2.data.o,ov_SC01_000_jr_801380E0.o,tail3.data.o,ov_SC01_000_jr_8013F350.o,tail4.data.o,ov_SC01_000_jr_8013FFD8.o,tail5.data.o,ov_SC01_000_jr_8015444C.o,tail6.data.o,ov_SC01_000_jr_80154C24.o,ov_SC01_000_jr_801588CC.o,tail7.data.o,ov_SC01_000_jr_80159C84.o,tail8.data.o,ov_SC01_000_jr_8015A3C8.o,tail9.data.o,ov_SC01_000_jr_8015AE2C.o,tail10.data.o,ov_SC01_000_jr_8015C32C.o,tail11.data.o,ov_SC01_000_jr_8016AB6C.o,tail12.data.o,ov_SC01_000_jr_801734BC.o,tail13.data.o,ov_SC01_000_jr_80178D40.o,tail14.data.o,ov_SC01_000_jr_8017A4AC.o,tail15.data.o,ov_SC01_000_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_000_jr_8012ACE0.o,tail2.data.o,ov_SC01_000_jr_801380E0.o,tail3.data.o,ov_SC01_000_jr_8013F350.o,tail4.data.o,ov_SC01_000_jr_8013FFD8.o,tail5.data.o,ov_SC01_000_jr_80140608.o,tail6.data.o,ov_SC01_000_jr_8015444C.o,tail7.data.o,ov_SC01_000_jr_80154C24.o,ov_SC01_000_jr_801588CC.o,tail8.data.o,ov_SC01_000_jr_80159C84.o,tail9.data.o,ov_SC01_000_jr_8015A3C8.o,tail10.data.o,ov_SC01_000_jr_8015AE2C.o,tail11.data.o,ov_SC01_000_jr_8015C32C.o,tail12.data.o,ov_SC01_000_jr_8016AB6C.o,tail13.data.o,ov_SC01_000_jr_801734BC.o,tail14.data.o,ov_SC01_000_jr_80178D40.o,tail15.data.o,ov_SC01_000_jr_8017A4AC.o,tail16.data.o,ov_SC01_000_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_000/ov_SC01_000_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_000/ov_SC01_000_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_000/ov_SC01_000_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -156,7 +156,7 @@ ov_SC01_001_ELF := $(ov_SC01_001_OUT).elf ov_SC01_001_MAPFILE := $(ov_SC01_001_OUT).map ov_SC01_001_LD_SCRIPT := $(ov_SC01_001_OUT).ld ov_SC01_001_SPLAT_YAML := config/splat.ov_SC01_001.yaml -ov_SC01_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_001_jr_8012ACE0.o,tail2.data.o,ov_SC01_001_jr_801380E0.o,tail3.data.o,ov_SC01_001_jr_8013F350.o,tail4.data.o,ov_SC01_001_jr_8013FFD8.o,tail5.data.o,ov_SC01_001_jr_8015444C.o,tail6.data.o,ov_SC01_001_jr_80154C24.o,ov_SC01_001_jr_801588CC.o,tail7.data.o,ov_SC01_001_jr_80159C84.o,tail8.data.o,ov_SC01_001_jr_8015A3C8.o,tail9.data.o,ov_SC01_001_jr_8015AE2C.o,tail10.data.o,ov_SC01_001_jr_8015C32C.o,tail11.data.o,ov_SC01_001_jr_8016AB6C.o,tail12.data.o,ov_SC01_001_jr_801734BC.o,tail13.data.o,ov_SC01_001_jr_80178D40.o,tail14.data.o,ov_SC01_001_jr_8017A4AC.o,tail15.data.o,ov_SC01_001_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_001_jr_8012ACE0.o,tail2.data.o,ov_SC01_001_jr_801380E0.o,tail3.data.o,ov_SC01_001_jr_8013F350.o,tail4.data.o,ov_SC01_001_jr_8013FFD8.o,tail5.data.o,ov_SC01_001_jr_80140608.o,tail6.data.o,ov_SC01_001_jr_8015444C.o,tail7.data.o,ov_SC01_001_jr_80154C24.o,ov_SC01_001_jr_801588CC.o,tail8.data.o,ov_SC01_001_jr_80159C84.o,tail9.data.o,ov_SC01_001_jr_8015A3C8.o,tail10.data.o,ov_SC01_001_jr_8015AE2C.o,tail11.data.o,ov_SC01_001_jr_8015C32C.o,tail12.data.o,ov_SC01_001_jr_8016AB6C.o,tail13.data.o,ov_SC01_001_jr_801734BC.o,tail14.data.o,ov_SC01_001_jr_80178D40.o,tail15.data.o,ov_SC01_001_jr_8017A4AC.o,tail16.data.o,ov_SC01_001_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_001/ov_SC01_001_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_001/ov_SC01_001_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_001/ov_SC01_001_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -183,7 +183,7 @@ ov_SC02_000_ELF := $(ov_SC02_000_OUT).elf ov_SC02_000_MAPFILE := $(ov_SC02_000_OUT).map ov_SC02_000_LD_SCRIPT := $(ov_SC02_000_OUT).ld ov_SC02_000_SPLAT_YAML := config/splat.ov_SC02_000.yaml -ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000_jr_8012ACE0.o,tail2.data.o,ov_SC02_000_jr_801380E0.o,tail3.data.o,ov_SC02_000_jr_8013F350.o,tail4.data.o,ov_SC02_000_jr_8013FFD8.o,tail5.data.o,ov_SC02_000_jr_8015444C.o,tail6.data.o,ov_SC02_000_jr_80154C24.o,ov_SC02_000_jr_801588CC.o,tail7.data.o,ov_SC02_000_jr_80159C84.o,tail8.data.o,ov_SC02_000_jr_8015A3C8.o,tail9.data.o,ov_SC02_000_jr_8015AE2C.o,tail10.data.o,ov_SC02_000_jr_8015C32C.o,tail11.data.o,ov_SC02_000_jr_8016AB6C.o,tail12.data.o,ov_SC02_000_jr_801734BC.o,tail13.data.o,ov_SC02_000_jr_80178D40.o,tail14.data.o,ov_SC02_000_jr_8017A4AC.o,tail15.data.o,ov_SC02_000_jr_8017FCB0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000_jr_8012ACE0.o,tail2.data.o,ov_SC02_000_jr_801380E0.o,tail3.data.o,ov_SC02_000_jr_8013F350.o,tail4.data.o,ov_SC02_000_jr_8013FFD8.o,tail5.data.o,ov_SC02_000_jr_80140608.o,tail6.data.o,ov_SC02_000_jr_8015444C.o,tail7.data.o,ov_SC02_000_jr_80154C24.o,ov_SC02_000_jr_801588CC.o,tail8.data.o,ov_SC02_000_jr_80159C84.o,tail9.data.o,ov_SC02_000_jr_8015A3C8.o,tail10.data.o,ov_SC02_000_jr_8015AE2C.o,tail11.data.o,ov_SC02_000_jr_8015C32C.o,tail12.data.o,ov_SC02_000_jr_8016AB6C.o,tail13.data.o,ov_SC02_000_jr_801734BC.o,tail14.data.o,ov_SC02_000_jr_80178D40.o,tail15.data.o,ov_SC02_000_jr_8017A4AC.o,tail16.data.o,ov_SC02_000_jr_8017FCB0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_000/ov_SC02_000_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_000/ov_SC02_000_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_000/ov_SC02_000_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -210,7 +210,7 @@ ov_SC02_003_ELF := $(ov_SC02_003_OUT).elf ov_SC02_003_MAPFILE := $(ov_SC02_003_OUT).map ov_SC02_003_LD_SCRIPT := $(ov_SC02_003_OUT).ld ov_SC02_003_SPLAT_YAML := config/splat.ov_SC02_003.yaml -ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003_jr_8012ACE0.o,tail2.data.o,ov_SC02_003_jr_801380E0.o,tail3.data.o,ov_SC02_003_jr_8013F350.o,tail4.data.o,ov_SC02_003_jr_8013FFD8.o,tail5.data.o,ov_SC02_003_jr_8015444C.o,tail6.data.o,ov_SC02_003_jr_80154C24.o,ov_SC02_003_jr_801588CC.o,tail7.data.o,ov_SC02_003_jr_80159C84.o,tail8.data.o,ov_SC02_003_jr_8015A3C8.o,tail9.data.o,ov_SC02_003_jr_8015AE2C.o,tail10.data.o,ov_SC02_003_jr_8015C32C.o,tail11.data.o,ov_SC02_003_jr_8016AB6C.o,tail12.data.o,ov_SC02_003_jr_801734BC.o,tail13.data.o,ov_SC02_003_jr_80178D40.o,tail14.data.o,ov_SC02_003_jr_8017A4AC.o,tail15.data.o,ov_SC02_003_jr_8017FCB0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003_jr_8012ACE0.o,tail2.data.o,ov_SC02_003_jr_801380E0.o,tail3.data.o,ov_SC02_003_jr_8013F350.o,tail4.data.o,ov_SC02_003_jr_8013FFD8.o,tail5.data.o,ov_SC02_003_jr_80140608.o,tail6.data.o,ov_SC02_003_jr_8015444C.o,tail7.data.o,ov_SC02_003_jr_80154C24.o,ov_SC02_003_jr_801588CC.o,tail8.data.o,ov_SC02_003_jr_80159C84.o,tail9.data.o,ov_SC02_003_jr_8015A3C8.o,tail10.data.o,ov_SC02_003_jr_8015AE2C.o,tail11.data.o,ov_SC02_003_jr_8015C32C.o,tail12.data.o,ov_SC02_003_jr_8016AB6C.o,tail13.data.o,ov_SC02_003_jr_801734BC.o,tail14.data.o,ov_SC02_003_jr_80178D40.o,tail15.data.o,ov_SC02_003_jr_8017A4AC.o,tail16.data.o,ov_SC02_003_jr_8017FCB0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_003/ov_SC02_003_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_003/ov_SC02_003_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_003/ov_SC02_003_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -237,7 +237,7 @@ ov_SC03_002_ELF := $(ov_SC03_002_OUT).elf ov_SC03_002_MAPFILE := $(ov_SC03_002_OUT).map ov_SC03_002_LD_SCRIPT := $(ov_SC03_002_OUT).ld ov_SC03_002_SPLAT_YAML := config/splat.ov_SC03_002.yaml -ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002_jr_8012ACE0.o,tail2.data.o,ov_SC03_002_jr_801380E0.o,tail3.data.o,ov_SC03_002_jr_8013F350.o,tail4.data.o,ov_SC03_002_jr_8013FFD8.o,tail5.data.o,ov_SC03_002_jr_8015444C.o,tail6.data.o,ov_SC03_002_jr_80154C24.o,ov_SC03_002_jr_801588CC.o,tail7.data.o,ov_SC03_002_jr_80159C84.o,tail8.data.o,ov_SC03_002_jr_8015A3C8.o,tail9.data.o,ov_SC03_002_jr_8015AE2C.o,tail10.data.o,ov_SC03_002_jr_8015C32C.o,tail11.data.o,ov_SC03_002_jr_8016AB6C.o,tail12.data.o,ov_SC03_002_jr_801734BC.o,tail13.data.o,ov_SC03_002_jr_80178D40.o,tail14.data.o,ov_SC03_002_jr_8017A4AC.o,tail15.data.o,ov_SC03_002_jr_8017D604.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002_jr_8012ACE0.o,tail2.data.o,ov_SC03_002_jr_801380E0.o,tail3.data.o,ov_SC03_002_jr_8013F350.o,tail4.data.o,ov_SC03_002_jr_8013FFD8.o,tail5.data.o,ov_SC03_002_jr_80140608.o,tail6.data.o,ov_SC03_002_jr_8015444C.o,tail7.data.o,ov_SC03_002_jr_80154C24.o,ov_SC03_002_jr_801588CC.o,tail8.data.o,ov_SC03_002_jr_80159C84.o,tail9.data.o,ov_SC03_002_jr_8015A3C8.o,tail10.data.o,ov_SC03_002_jr_8015AE2C.o,tail11.data.o,ov_SC03_002_jr_8015C32C.o,tail12.data.o,ov_SC03_002_jr_8016AB6C.o,tail13.data.o,ov_SC03_002_jr_801734BC.o,tail14.data.o,ov_SC03_002_jr_80178D40.o,tail15.data.o,ov_SC03_002_jr_8017A4AC.o,tail16.data.o,ov_SC03_002_jr_8017D604.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_002/ov_SC03_002_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_002/ov_SC03_002_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_002/ov_SC03_002_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -264,7 +264,7 @@ ov_SC03_006_ELF := $(ov_SC03_006_OUT).elf ov_SC03_006_MAPFILE := $(ov_SC03_006_OUT).map ov_SC03_006_LD_SCRIPT := $(ov_SC03_006_OUT).ld ov_SC03_006_SPLAT_YAML := config/splat.ov_SC03_006.yaml -ov_SC03_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_006_jr_8012ACE0.o,tail2.data.o,ov_SC03_006_jr_801380E0.o,tail3.data.o,ov_SC03_006_jr_8013F350.o,tail4.data.o,ov_SC03_006_jr_8013FFD8.o,tail5.data.o,ov_SC03_006_jr_8015444C.o,tail6.data.o,ov_SC03_006_jr_80154C24.o,ov_SC03_006_jr_801588CC.o,tail7.data.o,ov_SC03_006_jr_80159C84.o,tail8.data.o,ov_SC03_006_jr_8015A3C8.o,tail9.data.o,ov_SC03_006_jr_8015AE2C.o,tail10.data.o,ov_SC03_006_jr_8015C32C.o,tail11.data.o,ov_SC03_006_jr_8016AB6C.o,tail12.data.o,ov_SC03_006_jr_801734BC.o,tail13.data.o,ov_SC03_006_jr_80178D40.o,tail14.data.o,ov_SC03_006_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_006_jr_8012ACE0.o,tail2.data.o,ov_SC03_006_jr_801380E0.o,tail3.data.o,ov_SC03_006_jr_8013F350.o,tail4.data.o,ov_SC03_006_jr_8013FFD8.o,tail5.data.o,ov_SC03_006_jr_80140608.o,tail6.data.o,ov_SC03_006_jr_8015444C.o,tail7.data.o,ov_SC03_006_jr_80154C24.o,ov_SC03_006_jr_801588CC.o,tail8.data.o,ov_SC03_006_jr_80159C84.o,tail9.data.o,ov_SC03_006_jr_8015A3C8.o,tail10.data.o,ov_SC03_006_jr_8015AE2C.o,tail11.data.o,ov_SC03_006_jr_8015C32C.o,tail12.data.o,ov_SC03_006_jr_8016AB6C.o,tail13.data.o,ov_SC03_006_jr_801734BC.o,tail14.data.o,ov_SC03_006_jr_80178D40.o,tail15.data.o,ov_SC03_006_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_006/ov_SC03_006_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_006/ov_SC03_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_006/ov_SC03_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -291,7 +291,7 @@ ov_SC04_000_ELF := $(ov_SC04_000_OUT).elf ov_SC04_000_MAPFILE := $(ov_SC04_000_OUT).map ov_SC04_000_LD_SCRIPT := $(ov_SC04_000_OUT).ld ov_SC04_000_SPLAT_YAML := config/splat.ov_SC04_000.yaml -ov_SC04_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_000_jr_8012ACE0.o,tail2.data.o,ov_SC04_000_jr_801380E0.o,tail3.data.o,ov_SC04_000_jr_8013F350.o,tail4.data.o,ov_SC04_000_jr_8013FFD8.o,tail5.data.o,ov_SC04_000_jr_8015444C.o,tail6.data.o,ov_SC04_000_jr_80154C24.o,ov_SC04_000_jr_801588CC.o,tail7.data.o,ov_SC04_000_jr_80159C84.o,tail8.data.o,ov_SC04_000_jr_8015A3C8.o,tail9.data.o,ov_SC04_000_jr_8015AE2C.o,tail10.data.o,ov_SC04_000_jr_8015C32C.o,tail11.data.o,ov_SC04_000_jr_8016AB6C.o,tail12.data.o,ov_SC04_000_jr_801734BC.o,tail13.data.o,ov_SC04_000_jr_80178D40.o,tail14.data.o,ov_SC04_000_jr_8017A4AC.o,tail15.data.o,ov_SC04_000_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_000_jr_8012ACE0.o,tail2.data.o,ov_SC04_000_jr_801380E0.o,tail3.data.o,ov_SC04_000_jr_8013F350.o,tail4.data.o,ov_SC04_000_jr_8013FFD8.o,tail5.data.o,ov_SC04_000_jr_80140608.o,tail6.data.o,ov_SC04_000_jr_8015444C.o,tail7.data.o,ov_SC04_000_jr_80154C24.o,ov_SC04_000_jr_801588CC.o,tail8.data.o,ov_SC04_000_jr_80159C84.o,tail9.data.o,ov_SC04_000_jr_8015A3C8.o,tail10.data.o,ov_SC04_000_jr_8015AE2C.o,tail11.data.o,ov_SC04_000_jr_8015C32C.o,tail12.data.o,ov_SC04_000_jr_8016AB6C.o,tail13.data.o,ov_SC04_000_jr_801734BC.o,tail14.data.o,ov_SC04_000_jr_80178D40.o,tail15.data.o,ov_SC04_000_jr_8017A4AC.o,tail16.data.o,ov_SC04_000_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_000/ov_SC04_000_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_000/ov_SC04_000_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_000/ov_SC04_000_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -318,7 +318,7 @@ ov_SC04_018_ELF := $(ov_SC04_018_OUT).elf ov_SC04_018_MAPFILE := $(ov_SC04_018_OUT).map ov_SC04_018_LD_SCRIPT := $(ov_SC04_018_OUT).ld ov_SC04_018_SPLAT_YAML := config/splat.ov_SC04_018.yaml -ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018_jr_8012ACE0.o,tail2.data.o,ov_SC04_018_jr_801380E0.o,tail3.data.o,ov_SC04_018_jr_8013F350.o,tail4.data.o,ov_SC04_018_jr_8013FFD8.o,tail5.data.o,ov_SC04_018_jr_8015444C.o,tail6.data.o,ov_SC04_018_jr_80154C24.o,ov_SC04_018_jr_801588CC.o,tail7.data.o,ov_SC04_018_jr_80159C84.o,tail8.data.o,ov_SC04_018_jr_8015A3C8.o,tail9.data.o,ov_SC04_018_jr_8015AE2C.o,tail10.data.o,ov_SC04_018_jr_8015C32C.o,tail11.data.o,ov_SC04_018_jr_8016AB6C.o,tail12.data.o,ov_SC04_018_jr_801734BC.o,tail13.data.o,ov_SC04_018_jr_80178D40.o,tail14.data.o,ov_SC04_018_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018_jr_8012ACE0.o,tail2.data.o,ov_SC04_018_jr_801380E0.o,tail3.data.o,ov_SC04_018_jr_8013F350.o,tail4.data.o,ov_SC04_018_jr_8013FFD8.o,tail5.data.o,ov_SC04_018_jr_80140608.o,tail6.data.o,ov_SC04_018_jr_8015444C.o,tail7.data.o,ov_SC04_018_jr_80154C24.o,ov_SC04_018_jr_801588CC.o,tail8.data.o,ov_SC04_018_jr_80159C84.o,tail9.data.o,ov_SC04_018_jr_8015A3C8.o,tail10.data.o,ov_SC04_018_jr_8015AE2C.o,tail11.data.o,ov_SC04_018_jr_8015C32C.o,tail12.data.o,ov_SC04_018_jr_8016AB6C.o,tail13.data.o,ov_SC04_018_jr_801734BC.o,tail14.data.o,ov_SC04_018_jr_80178D40.o,tail15.data.o,ov_SC04_018_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_018/ov_SC04_018_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_018/ov_SC04_018_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_018/ov_SC04_018_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -345,7 +345,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_jr_8012ACE0.o,tail2.data.o,ov_SC04_019_jr_801380E0.o,tail3.data.o,ov_SC04_019_jr_8013F350.o,tail4.data.o,ov_SC04_019_jr_8013FFD8.o,tail5.data.o,ov_SC04_019_jr_8015444C.o,tail6.data.o,ov_SC04_019_jr_80154C24.o,ov_SC04_019_jr_801588CC.o,tail7.data.o,ov_SC04_019_jr_80159C84.o,tail8.data.o,ov_SC04_019_jr_8015A3C8.o,tail9.data.o,ov_SC04_019_jr_8015AE2C.o,tail10.data.o,ov_SC04_019_jr_8015C32C.o,tail11.data.o,ov_SC04_019_jr_8016AB6C.o,tail12.data.o,ov_SC04_019_jr_801734BC.o,tail13.data.o,ov_SC04_019_jr_80178D40.o,tail14.data.o,ov_SC04_019_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019_jr_8012ACE0.o,tail2.data.o,ov_SC04_019_jr_801380E0.o,tail3.data.o,ov_SC04_019_jr_8013F350.o,tail4.data.o,ov_SC04_019_jr_8013FFD8.o,tail5.data.o,ov_SC04_019_jr_80140608.o,tail6.data.o,ov_SC04_019_jr_8015444C.o,tail7.data.o,ov_SC04_019_jr_80154C24.o,ov_SC04_019_jr_801588CC.o,tail8.data.o,ov_SC04_019_jr_80159C84.o,tail9.data.o,ov_SC04_019_jr_8015A3C8.o,tail10.data.o,ov_SC04_019_jr_8015AE2C.o,tail11.data.o,ov_SC04_019_jr_8015C32C.o,tail12.data.o,ov_SC04_019_jr_8016AB6C.o,tail13.data.o,ov_SC04_019_jr_801734BC.o,tail14.data.o,ov_SC04_019_jr_80178D40.o,tail15.data.o,ov_SC04_019_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_019/ov_SC04_019_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_019/ov_SC04_019_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_019/ov_SC04_019_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -372,7 +372,7 @@ ov_SC05_000_ELF := $(ov_SC05_000_OUT).elf ov_SC05_000_MAPFILE := $(ov_SC05_000_OUT).map ov_SC05_000_LD_SCRIPT := $(ov_SC05_000_OUT).ld ov_SC05_000_SPLAT_YAML := config/splat.ov_SC05_000.yaml -ov_SC05_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_000_jr_8012ACE0.o,tail2.data.o,ov_SC05_000_jr_801380E0.o,tail3.data.o,ov_SC05_000_jr_8013F350.o,tail4.data.o,ov_SC05_000_jr_8013FFD8.o,tail5.data.o,ov_SC05_000_jr_8015444C.o,tail6.data.o,ov_SC05_000_jr_80154C24.o,ov_SC05_000_jr_801588CC.o,tail7.data.o,ov_SC05_000_jr_80159C84.o,tail8.data.o,ov_SC05_000_jr_8015A3C8.o,tail9.data.o,ov_SC05_000_jr_8015AE2C.o,tail10.data.o,ov_SC05_000_jr_8015C32C.o,tail11.data.o,ov_SC05_000_jr_8016AB6C.o,tail12.data.o,ov_SC05_000_jr_801734BC.o,tail13.data.o,ov_SC05_000_jr_80178D40.o,tail14.data.o,ov_SC05_000_jr_8017A4AC.o,tail15.data.o,ov_SC05_000_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_000_jr_8012ACE0.o,tail2.data.o,ov_SC05_000_jr_801380E0.o,tail3.data.o,ov_SC05_000_jr_8013F350.o,tail4.data.o,ov_SC05_000_jr_8013FFD8.o,tail5.data.o,ov_SC05_000_jr_80140608.o,tail6.data.o,ov_SC05_000_jr_8015444C.o,tail7.data.o,ov_SC05_000_jr_80154C24.o,ov_SC05_000_jr_801588CC.o,tail8.data.o,ov_SC05_000_jr_80159C84.o,tail9.data.o,ov_SC05_000_jr_8015A3C8.o,tail10.data.o,ov_SC05_000_jr_8015AE2C.o,tail11.data.o,ov_SC05_000_jr_8015C32C.o,tail12.data.o,ov_SC05_000_jr_8016AB6C.o,tail13.data.o,ov_SC05_000_jr_801734BC.o,tail14.data.o,ov_SC05_000_jr_80178D40.o,tail15.data.o,ov_SC05_000_jr_8017A4AC.o,tail16.data.o,ov_SC05_000_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_000/ov_SC05_000_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_000/ov_SC05_000_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_000/ov_SC05_000_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -399,7 +399,7 @@ ov_SC06_000_ELF := $(ov_SC06_000_OUT).elf ov_SC06_000_MAPFILE := $(ov_SC06_000_OUT).map ov_SC06_000_LD_SCRIPT := $(ov_SC06_000_OUT).ld ov_SC06_000_SPLAT_YAML := config/splat.ov_SC06_000.yaml -ov_SC06_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_000_jr_8012ACE0.o,tail2.data.o,ov_SC06_000_jr_801380E0.o,tail3.data.o,ov_SC06_000_jr_8013F350.o,tail4.data.o,ov_SC06_000_jr_8015444C.o,tail5.data.o,ov_SC06_000_jr_80154C24.o,ov_SC06_000_jr_801588CC.o,tail6.data.o,ov_SC06_000_jr_80159C84.o,tail7.data.o,ov_SC06_000_jr_8015A3C8.o,tail8.data.o,ov_SC06_000_jr_8015AE2C.o,tail9.data.o,ov_SC06_000_jr_8015C32C.o,tail10.data.o,ov_SC06_000_jr_8016AB6C.o,tail11.data.o,ov_SC06_000_jr_801734BC.o,tail12.data.o,ov_SC06_000_jr_80178D40.o,tail13.data.o,ov_SC06_000_jr_8017A4AC.o,tail14.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_000_jr_8012ACE0.o,tail2.data.o,ov_SC06_000_jr_801380E0.o,tail3.data.o,ov_SC06_000_jr_8013F350.o,tail4.data.o,ov_SC06_000_jr_80140608.o,tail5.data.o,ov_SC06_000_jr_8015444C.o,tail6.data.o,ov_SC06_000_jr_80154C24.o,ov_SC06_000_jr_801588CC.o,tail7.data.o,ov_SC06_000_jr_80159C84.o,tail8.data.o,ov_SC06_000_jr_8015A3C8.o,tail9.data.o,ov_SC06_000_jr_8015AE2C.o,tail10.data.o,ov_SC06_000_jr_8015C32C.o,tail11.data.o,ov_SC06_000_jr_8016AB6C.o,tail12.data.o,ov_SC06_000_jr_801734BC.o,tail13.data.o,ov_SC06_000_jr_80178D40.o,tail14.data.o,ov_SC06_000_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_000/ov_SC06_000_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_000/ov_SC06_000_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_000/ov_SC06_000_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -426,7 +426,7 @@ ov_SC07_000_ELF := $(ov_SC07_000_OUT).elf ov_SC07_000_MAPFILE := $(ov_SC07_000_OUT).map ov_SC07_000_LD_SCRIPT := $(ov_SC07_000_OUT).ld ov_SC07_000_SPLAT_YAML := config/splat.ov_SC07_000.yaml -ov_SC07_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_000_jr_8012ACE0.o,tail2.data.o,ov_SC07_000_jr_801380E0.o,tail3.data.o,ov_SC07_000_jr_8013F350.o,tail4.data.o,ov_SC07_000_jr_8013FFD8.o,tail5.data.o,ov_SC07_000_jr_8015444C.o,tail6.data.o,ov_SC07_000_jr_80154C24.o,ov_SC07_000_jr_801588CC.o,tail7.data.o,ov_SC07_000_jr_80159C84.o,tail8.data.o,ov_SC07_000_jr_8015A3C8.o,tail9.data.o,ov_SC07_000_jr_8015AE2C.o,tail10.data.o,ov_SC07_000_jr_8015C32C.o,tail11.data.o,ov_SC07_000_jr_8016AB6C.o,tail12.data.o,ov_SC07_000_jr_801734BC.o,tail13.data.o,ov_SC07_000_jr_80178D40.o,tail14.data.o,ov_SC07_000_jr_8017A4AC.o,tail15.data.o,ov_SC07_000_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_000_jr_8012ACE0.o,tail2.data.o,ov_SC07_000_jr_801380E0.o,tail3.data.o,ov_SC07_000_jr_8013F350.o,tail4.data.o,ov_SC07_000_jr_8013FFD8.o,tail5.data.o,ov_SC07_000_jr_80140608.o,tail6.data.o,ov_SC07_000_jr_8015444C.o,tail7.data.o,ov_SC07_000_jr_80154C24.o,ov_SC07_000_jr_801588CC.o,tail8.data.o,ov_SC07_000_jr_80159C84.o,tail9.data.o,ov_SC07_000_jr_8015A3C8.o,tail10.data.o,ov_SC07_000_jr_8015AE2C.o,tail11.data.o,ov_SC07_000_jr_8015C32C.o,tail12.data.o,ov_SC07_000_jr_8016AB6C.o,tail13.data.o,ov_SC07_000_jr_801734BC.o,tail14.data.o,ov_SC07_000_jr_80178D40.o,tail15.data.o,ov_SC07_000_jr_8017A4AC.o,tail16.data.o,ov_SC07_000_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_000/ov_SC07_000_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC07_000/ov_SC07_000_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_000/ov_SC07_000_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -453,7 +453,7 @@ ov_SC01_004_ELF := $(ov_SC01_004_OUT).elf ov_SC01_004_MAPFILE := $(ov_SC01_004_OUT).map ov_SC01_004_LD_SCRIPT := $(ov_SC01_004_OUT).ld ov_SC01_004_SPLAT_YAML := config/splat.ov_SC01_004.yaml -ov_SC01_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_004_jr_8012ACE0.o,tail2.data.o,ov_SC01_004_jr_801380E0.o,tail3.data.o,ov_SC01_004_jr_8013F350.o,tail4.data.o,ov_SC01_004_jr_8013FFD8.o,tail5.data.o,ov_SC01_004_jr_8015444C.o,tail6.data.o,ov_SC01_004_jr_80154C24.o,ov_SC01_004_jr_801588CC.o,tail7.data.o,ov_SC01_004_jr_80159C84.o,tail8.data.o,ov_SC01_004_jr_8015A3C8.o,tail9.data.o,ov_SC01_004_jr_8015AE2C.o,tail10.data.o,ov_SC01_004_jr_8015C32C.o,tail11.data.o,ov_SC01_004_jr_8016AB6C.o,tail12.data.o,ov_SC01_004_jr_801734BC.o,tail13.data.o,ov_SC01_004_jr_80178D40.o,tail14.data.o,ov_SC01_004_jr_8017A4AC.o,tail15.data.o,ov_SC01_004_jr_8017BE9C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_004_jr_8012ACE0.o,tail2.data.o,ov_SC01_004_jr_801380E0.o,tail3.data.o,ov_SC01_004_jr_8013F350.o,tail4.data.o,ov_SC01_004_jr_8013FFD8.o,tail5.data.o,ov_SC01_004_jr_80140608.o,tail6.data.o,ov_SC01_004_jr_8015444C.o,tail7.data.o,ov_SC01_004_jr_80154C24.o,ov_SC01_004_jr_801588CC.o,tail8.data.o,ov_SC01_004_jr_80159C84.o,tail9.data.o,ov_SC01_004_jr_8015A3C8.o,tail10.data.o,ov_SC01_004_jr_8015AE2C.o,tail11.data.o,ov_SC01_004_jr_8015C32C.o,tail12.data.o,ov_SC01_004_jr_8016AB6C.o,tail13.data.o,ov_SC01_004_jr_801734BC.o,tail14.data.o,ov_SC01_004_jr_80178D40.o,tail15.data.o,ov_SC01_004_jr_8017A4AC.o,tail16.data.o,ov_SC01_004_jr_8017BE9C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_004/ov_SC01_004_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_004/ov_SC01_004_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_004/ov_SC01_004_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -480,7 +480,7 @@ ov_SC01_008_ELF := $(ov_SC01_008_OUT).elf ov_SC01_008_MAPFILE := $(ov_SC01_008_OUT).map ov_SC01_008_LD_SCRIPT := $(ov_SC01_008_OUT).ld ov_SC01_008_SPLAT_YAML := config/splat.ov_SC01_008.yaml -ov_SC01_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_008_jr_8012ACE0.o,tail2.data.o,ov_SC01_008_jr_801380E0.o,tail3.data.o,ov_SC01_008_jr_8013F350.o,tail4.data.o,ov_SC01_008_jr_8013FFD8.o,tail5.data.o,ov_SC01_008_jr_8015444C.o,tail6.data.o,ov_SC01_008_jr_80154C24.o,ov_SC01_008_jr_801588CC.o,tail7.data.o,ov_SC01_008_jr_80159C84.o,tail8.data.o,ov_SC01_008_jr_8015A3C8.o,tail9.data.o,ov_SC01_008_jr_8015AE2C.o,tail10.data.o,ov_SC01_008_jr_8015C32C.o,tail11.data.o,ov_SC01_008_jr_8016AB6C.o,tail12.data.o,ov_SC01_008_jr_801734BC.o,tail13.data.o,ov_SC01_008_jr_80178D40.o,tail14.data.o,ov_SC01_008_jr_8017A4AC.o,tail15.data.o,ov_SC01_008_jr_8017BE9C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_008_jr_8012ACE0.o,tail2.data.o,ov_SC01_008_jr_801380E0.o,tail3.data.o,ov_SC01_008_jr_8013F350.o,tail4.data.o,ov_SC01_008_jr_8013FFD8.o,tail5.data.o,ov_SC01_008_jr_80140608.o,tail6.data.o,ov_SC01_008_jr_8015444C.o,tail7.data.o,ov_SC01_008_jr_80154C24.o,ov_SC01_008_jr_801588CC.o,tail8.data.o,ov_SC01_008_jr_80159C84.o,tail9.data.o,ov_SC01_008_jr_8015A3C8.o,tail10.data.o,ov_SC01_008_jr_8015AE2C.o,tail11.data.o,ov_SC01_008_jr_8015C32C.o,tail12.data.o,ov_SC01_008_jr_8016AB6C.o,tail13.data.o,ov_SC01_008_jr_801734BC.o,tail14.data.o,ov_SC01_008_jr_80178D40.o,tail15.data.o,ov_SC01_008_jr_8017A4AC.o,tail16.data.o,ov_SC01_008_jr_8017BE9C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_008/ov_SC01_008_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_008/ov_SC01_008_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_008/ov_SC01_008_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -507,7 +507,7 @@ ov_SC01_009_ELF := $(ov_SC01_009_OUT).elf ov_SC01_009_MAPFILE := $(ov_SC01_009_OUT).map ov_SC01_009_LD_SCRIPT := $(ov_SC01_009_OUT).ld ov_SC01_009_SPLAT_YAML := config/splat.ov_SC01_009.yaml -ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009_jr_8012ACE0.o,tail2.data.o,ov_SC01_009_jr_801380E0.o,tail3.data.o,ov_SC01_009_jr_8013F350.o,tail4.data.o,ov_SC01_009_jr_8013FFD8.o,tail5.data.o,ov_SC01_009_jr_8015444C.o,tail6.data.o,ov_SC01_009_jr_80154C24.o,ov_SC01_009_jr_801588CC.o,tail7.data.o,ov_SC01_009_jr_80159C84.o,tail8.data.o,ov_SC01_009_jr_8015A3C8.o,tail9.data.o,ov_SC01_009_jr_8015AE2C.o,tail10.data.o,ov_SC01_009_jr_8015C32C.o,tail11.data.o,ov_SC01_009_jr_8016AB6C.o,tail12.data.o,ov_SC01_009_jr_801734BC.o,tail13.data.o,ov_SC01_009_jr_80178D40.o,tail14.data.o,ov_SC01_009_jr_8017A4AC.o,tail15.data.o,ov_SC01_009_jr_8017BE9C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009_jr_8012ACE0.o,tail2.data.o,ov_SC01_009_jr_801380E0.o,tail3.data.o,ov_SC01_009_jr_8013F350.o,tail4.data.o,ov_SC01_009_jr_8013FFD8.o,tail5.data.o,ov_SC01_009_jr_80140608.o,tail6.data.o,ov_SC01_009_jr_8015444C.o,tail7.data.o,ov_SC01_009_jr_80154C24.o,ov_SC01_009_jr_801588CC.o,tail8.data.o,ov_SC01_009_jr_80159C84.o,tail9.data.o,ov_SC01_009_jr_8015A3C8.o,tail10.data.o,ov_SC01_009_jr_8015AE2C.o,tail11.data.o,ov_SC01_009_jr_8015C32C.o,tail12.data.o,ov_SC01_009_jr_8016AB6C.o,tail13.data.o,ov_SC01_009_jr_801734BC.o,tail14.data.o,ov_SC01_009_jr_80178D40.o,tail15.data.o,ov_SC01_009_jr_8017A4AC.o,tail16.data.o,ov_SC01_009_jr_8017BE9C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_009/ov_SC01_009_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_009/ov_SC01_009_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_009/ov_SC01_009_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -534,7 +534,7 @@ ov_SC01_074_ELF := $(ov_SC01_074_OUT).elf ov_SC01_074_MAPFILE := $(ov_SC01_074_OUT).map ov_SC01_074_LD_SCRIPT := $(ov_SC01_074_OUT).ld ov_SC01_074_SPLAT_YAML := config/splat.ov_SC01_074.yaml -ov_SC01_074_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_074_jr_8012ACE0.o,tail2.data.o,ov_SC01_074_jr_801380E0.o,tail3.data.o,ov_SC01_074_jr_8013F350.o,tail4.data.o,ov_SC01_074_jr_8013FFD8.o,tail5.data.o,ov_SC01_074_jr_8015444C.o,tail6.data.o,ov_SC01_074_jr_80154C24.o,ov_SC01_074_jr_801588CC.o,tail7.data.o,ov_SC01_074_jr_80159C84.o,tail8.data.o,ov_SC01_074_jr_8015A3C8.o,tail9.data.o,ov_SC01_074_jr_8015AE2C.o,tail10.data.o,ov_SC01_074_jr_8015C32C.o,tail11.data.o,ov_SC01_074_jr_8016AB6C.o,tail12.data.o,ov_SC01_074_jr_801734BC.o,tail13.data.o,ov_SC01_074_jr_80178D40.o,tail14.data.o,ov_SC01_074_jr_8017A4AC.o,tail15.data.o,ov_SC01_074_jr_8017BE9C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_074_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_074_jr_8012ACE0.o,tail2.data.o,ov_SC01_074_jr_801380E0.o,tail3.data.o,ov_SC01_074_jr_8013F350.o,tail4.data.o,ov_SC01_074_jr_8013FFD8.o,tail5.data.o,ov_SC01_074_jr_80140608.o,tail6.data.o,ov_SC01_074_jr_8015444C.o,tail7.data.o,ov_SC01_074_jr_80154C24.o,ov_SC01_074_jr_801588CC.o,tail8.data.o,ov_SC01_074_jr_80159C84.o,tail9.data.o,ov_SC01_074_jr_8015A3C8.o,tail10.data.o,ov_SC01_074_jr_8015AE2C.o,tail11.data.o,ov_SC01_074_jr_8015C32C.o,tail12.data.o,ov_SC01_074_jr_8016AB6C.o,tail13.data.o,ov_SC01_074_jr_801734BC.o,tail14.data.o,ov_SC01_074_jr_80178D40.o,tail15.data.o,ov_SC01_074_jr_8017A4AC.o,tail16.data.o,ov_SC01_074_jr_8017BE9C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_074/ov_SC01_074_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_074/ov_SC01_074_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_074/ov_SC01_074_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -561,7 +561,7 @@ ov_SC01_080_ELF := $(ov_SC01_080_OUT).elf ov_SC01_080_MAPFILE := $(ov_SC01_080_OUT).map ov_SC01_080_LD_SCRIPT := $(ov_SC01_080_OUT).ld ov_SC01_080_SPLAT_YAML := config/splat.ov_SC01_080.yaml -ov_SC01_080_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_080_jr_8012ACE0.o,tail2.data.o,ov_SC01_080_jr_801380E0.o,tail3.data.o,ov_SC01_080_jr_8013F350.o,tail4.data.o,ov_SC01_080_jr_8013FFD8.o,tail5.data.o,ov_SC01_080_jr_8015444C.o,tail6.data.o,ov_SC01_080_jr_80154C24.o,ov_SC01_080_jr_801588CC.o,tail7.data.o,ov_SC01_080_jr_80159C84.o,tail8.data.o,ov_SC01_080_jr_8015A3C8.o,tail9.data.o,ov_SC01_080_jr_8015AE2C.o,tail10.data.o,ov_SC01_080_jr_8015C32C.o,tail11.data.o,ov_SC01_080_jr_8016AB6C.o,tail12.data.o,ov_SC01_080_jr_801734BC.o,tail13.data.o,ov_SC01_080_jr_80178D40.o,tail14.data.o,ov_SC01_080_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_080_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_080_jr_8012ACE0.o,tail2.data.o,ov_SC01_080_jr_801380E0.o,tail3.data.o,ov_SC01_080_jr_8013F350.o,tail4.data.o,ov_SC01_080_jr_8013FFD8.o,tail5.data.o,ov_SC01_080_jr_80140608.o,tail6.data.o,ov_SC01_080_jr_8015444C.o,tail7.data.o,ov_SC01_080_jr_80154C24.o,ov_SC01_080_jr_801588CC.o,tail8.data.o,ov_SC01_080_jr_80159C84.o,tail9.data.o,ov_SC01_080_jr_8015A3C8.o,tail10.data.o,ov_SC01_080_jr_8015AE2C.o,tail11.data.o,ov_SC01_080_jr_8015C32C.o,tail12.data.o,ov_SC01_080_jr_8016AB6C.o,tail13.data.o,ov_SC01_080_jr_801734BC.o,tail14.data.o,ov_SC01_080_jr_80178D40.o,tail15.data.o,ov_SC01_080_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_080/ov_SC01_080_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_080/ov_SC01_080_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_080/ov_SC01_080_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -588,7 +588,7 @@ ov_SC01_084_ELF := $(ov_SC01_084_OUT).elf ov_SC01_084_MAPFILE := $(ov_SC01_084_OUT).map ov_SC01_084_LD_SCRIPT := $(ov_SC01_084_OUT).ld ov_SC01_084_SPLAT_YAML := config/splat.ov_SC01_084.yaml -ov_SC01_084_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_084_jr_8012ACE0.o,tail2.data.o,ov_SC01_084_jr_801380E0.o,tail3.data.o,ov_SC01_084_jr_8013F350.o,tail4.data.o,ov_SC01_084_jr_8013FFD8.o,tail5.data.o,ov_SC01_084_jr_8015444C.o,tail6.data.o,ov_SC01_084_jr_80154C24.o,ov_SC01_084_jr_801588CC.o,tail7.data.o,ov_SC01_084_jr_80159C84.o,tail8.data.o,ov_SC01_084_jr_8015A3C8.o,tail9.data.o,ov_SC01_084_jr_8015AE2C.o,tail10.data.o,ov_SC01_084_jr_8015C32C.o,tail11.data.o,ov_SC01_084_jr_8016AB6C.o,tail12.data.o,ov_SC01_084_jr_801734BC.o,tail13.data.o,ov_SC01_084_jr_80178D40.o,tail14.data.o,ov_SC01_084_jr_8017A4AC.o,tail15.data.o,ov_SC01_084_jr_8017CA80.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_084_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_084_jr_8012ACE0.o,tail2.data.o,ov_SC01_084_jr_801380E0.o,tail3.data.o,ov_SC01_084_jr_8013F350.o,tail4.data.o,ov_SC01_084_jr_8013FFD8.o,tail5.data.o,ov_SC01_084_jr_80140608.o,tail6.data.o,ov_SC01_084_jr_8015444C.o,tail7.data.o,ov_SC01_084_jr_80154C24.o,ov_SC01_084_jr_801588CC.o,tail8.data.o,ov_SC01_084_jr_80159C84.o,tail9.data.o,ov_SC01_084_jr_8015A3C8.o,tail10.data.o,ov_SC01_084_jr_8015AE2C.o,tail11.data.o,ov_SC01_084_jr_8015C32C.o,tail12.data.o,ov_SC01_084_jr_8016AB6C.o,tail13.data.o,ov_SC01_084_jr_801734BC.o,tail14.data.o,ov_SC01_084_jr_80178D40.o,tail15.data.o,ov_SC01_084_jr_8017A4AC.o,tail16.data.o,ov_SC01_084_jr_8017CA80.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_084/ov_SC01_084_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC01_084/ov_SC01_084_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_084/ov_SC01_084_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -615,7 +615,7 @@ ov_SC02_004_ELF := $(ov_SC02_004_OUT).elf ov_SC02_004_MAPFILE := $(ov_SC02_004_OUT).map ov_SC02_004_LD_SCRIPT := $(ov_SC02_004_OUT).ld ov_SC02_004_SPLAT_YAML := config/splat.ov_SC02_004.yaml -ov_SC02_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_004_jr_8012ACE0.o,tail2.data.o,ov_SC02_004_jr_801380E0.o,tail3.data.o,ov_SC02_004_jr_8013F350.o,tail4.data.o,ov_SC02_004_jr_8013FFD8.o,tail5.data.o,ov_SC02_004_jr_8015444C.o,tail6.data.o,ov_SC02_004_jr_80154C24.o,ov_SC02_004_jr_801588CC.o,tail7.data.o,ov_SC02_004_jr_80159C84.o,tail8.data.o,ov_SC02_004_jr_8015A3C8.o,tail9.data.o,ov_SC02_004_jr_8015AE2C.o,tail10.data.o,ov_SC02_004_jr_8015C32C.o,tail11.data.o,ov_SC02_004_jr_8016AB6C.o,tail12.data.o,ov_SC02_004_jr_801734BC.o,tail13.data.o,ov_SC02_004_jr_80178D40.o,tail14.data.o,ov_SC02_004_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_004_jr_8012ACE0.o,tail2.data.o,ov_SC02_004_jr_801380E0.o,tail3.data.o,ov_SC02_004_jr_8013F350.o,tail4.data.o,ov_SC02_004_jr_8013FFD8.o,tail5.data.o,ov_SC02_004_jr_80140608.o,tail6.data.o,ov_SC02_004_jr_8015444C.o,tail7.data.o,ov_SC02_004_jr_80154C24.o,ov_SC02_004_jr_801588CC.o,tail8.data.o,ov_SC02_004_jr_80159C84.o,tail9.data.o,ov_SC02_004_jr_8015A3C8.o,tail10.data.o,ov_SC02_004_jr_8015AE2C.o,tail11.data.o,ov_SC02_004_jr_8015C32C.o,tail12.data.o,ov_SC02_004_jr_8016AB6C.o,tail13.data.o,ov_SC02_004_jr_801734BC.o,tail14.data.o,ov_SC02_004_jr_80178D40.o,tail15.data.o,ov_SC02_004_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_004/ov_SC02_004_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_004/ov_SC02_004_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_004/ov_SC02_004_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -642,7 +642,7 @@ ov_SC02_005_ELF := $(ov_SC02_005_OUT).elf ov_SC02_005_MAPFILE := $(ov_SC02_005_OUT).map ov_SC02_005_LD_SCRIPT := $(ov_SC02_005_OUT).ld ov_SC02_005_SPLAT_YAML := config/splat.ov_SC02_005.yaml -ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005_jr_8012ACE0.o,tail2.data.o,ov_SC02_005_jr_801380E0.o,tail3.data.o,ov_SC02_005_jr_8013F350.o,tail4.data.o,ov_SC02_005_jr_8013FFD8.o,tail5.data.o,ov_SC02_005_jr_8015444C.o,tail6.data.o,ov_SC02_005_jr_80154C24.o,ov_SC02_005_jr_801588CC.o,tail7.data.o,ov_SC02_005_jr_80159C84.o,tail8.data.o,ov_SC02_005_jr_8015A3C8.o,tail9.data.o,ov_SC02_005_jr_8015AE2C.o,tail10.data.o,ov_SC02_005_jr_8015C32C.o,tail11.data.o,ov_SC02_005_jr_8016AB6C.o,tail12.data.o,ov_SC02_005_jr_801734BC.o,tail13.data.o,ov_SC02_005_jr_80178D40.o,tail14.data.o,ov_SC02_005_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005_jr_8012ACE0.o,tail2.data.o,ov_SC02_005_jr_801380E0.o,tail3.data.o,ov_SC02_005_jr_8013F350.o,tail4.data.o,ov_SC02_005_jr_8013FFD8.o,tail5.data.o,ov_SC02_005_jr_80140608.o,tail6.data.o,ov_SC02_005_jr_8015444C.o,tail7.data.o,ov_SC02_005_jr_80154C24.o,ov_SC02_005_jr_801588CC.o,tail8.data.o,ov_SC02_005_jr_80159C84.o,tail9.data.o,ov_SC02_005_jr_8015A3C8.o,tail10.data.o,ov_SC02_005_jr_8015AE2C.o,tail11.data.o,ov_SC02_005_jr_8015C32C.o,tail12.data.o,ov_SC02_005_jr_8016AB6C.o,tail13.data.o,ov_SC02_005_jr_801734BC.o,tail14.data.o,ov_SC02_005_jr_80178D40.o,tail15.data.o,ov_SC02_005_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_005/ov_SC02_005_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_005/ov_SC02_005_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_005/ov_SC02_005_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -669,7 +669,7 @@ ov_SC02_011_ELF := $(ov_SC02_011_OUT).elf ov_SC02_011_MAPFILE := $(ov_SC02_011_OUT).map ov_SC02_011_LD_SCRIPT := $(ov_SC02_011_OUT).ld ov_SC02_011_SPLAT_YAML := config/splat.ov_SC02_011.yaml -ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011_jr_8012ACE0.o,tail2.data.o,ov_SC02_011_jr_801380E0.o,tail3.data.o,ov_SC02_011_jr_8013F350.o,tail4.data.o,ov_SC02_011_jr_8013FFD8.o,tail5.data.o,ov_SC02_011_jr_8015444C.o,tail6.data.o,ov_SC02_011_jr_80154C24.o,ov_SC02_011_jr_801588CC.o,tail7.data.o,ov_SC02_011_jr_80159C84.o,tail8.data.o,ov_SC02_011_jr_8015A3C8.o,tail9.data.o,ov_SC02_011_jr_8015AE2C.o,tail10.data.o,ov_SC02_011_jr_8015C32C.o,tail11.data.o,ov_SC02_011_jr_8016AB6C.o,tail12.data.o,ov_SC02_011_jr_801734BC.o,tail13.data.o,ov_SC02_011_jr_80178D40.o,tail14.data.o,ov_SC02_011_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011_jr_8012ACE0.o,tail2.data.o,ov_SC02_011_jr_801380E0.o,tail3.data.o,ov_SC02_011_jr_8013F350.o,tail4.data.o,ov_SC02_011_jr_8013FFD8.o,tail5.data.o,ov_SC02_011_jr_80140608.o,tail6.data.o,ov_SC02_011_jr_8015444C.o,tail7.data.o,ov_SC02_011_jr_80154C24.o,ov_SC02_011_jr_801588CC.o,tail8.data.o,ov_SC02_011_jr_80159C84.o,tail9.data.o,ov_SC02_011_jr_8015A3C8.o,tail10.data.o,ov_SC02_011_jr_8015AE2C.o,tail11.data.o,ov_SC02_011_jr_8015C32C.o,tail12.data.o,ov_SC02_011_jr_8016AB6C.o,tail13.data.o,ov_SC02_011_jr_801734BC.o,tail14.data.o,ov_SC02_011_jr_80178D40.o,tail15.data.o,ov_SC02_011_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_011/ov_SC02_011_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_011/ov_SC02_011_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_011/ov_SC02_011_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -696,7 +696,7 @@ ov_SC02_015_ELF := $(ov_SC02_015_OUT).elf ov_SC02_015_MAPFILE := $(ov_SC02_015_OUT).map ov_SC02_015_LD_SCRIPT := $(ov_SC02_015_OUT).ld ov_SC02_015_SPLAT_YAML := config/splat.ov_SC02_015.yaml -ov_SC02_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_015_jr_8012ACE0.o,tail2.data.o,ov_SC02_015_jr_801380E0.o,tail3.data.o,ov_SC02_015_jr_8013F350.o,tail4.data.o,ov_SC02_015_jr_8013FFD8.o,tail5.data.o,ov_SC02_015_jr_8015444C.o,tail6.data.o,ov_SC02_015_jr_80154C24.o,ov_SC02_015_jr_801588CC.o,tail7.data.o,ov_SC02_015_jr_80159C84.o,tail8.data.o,ov_SC02_015_jr_8015A3C8.o,tail9.data.o,ov_SC02_015_jr_8015AE2C.o,tail10.data.o,ov_SC02_015_jr_8015C32C.o,tail11.data.o,ov_SC02_015_jr_8016AB6C.o,tail12.data.o,ov_SC02_015_jr_801734BC.o,tail13.data.o,ov_SC02_015_jr_80178D40.o,tail14.data.o,ov_SC02_015_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_015_jr_8012ACE0.o,tail2.data.o,ov_SC02_015_jr_801380E0.o,tail3.data.o,ov_SC02_015_jr_8013F350.o,tail4.data.o,ov_SC02_015_jr_8013FFD8.o,tail5.data.o,ov_SC02_015_jr_80140608.o,tail6.data.o,ov_SC02_015_jr_8015444C.o,tail7.data.o,ov_SC02_015_jr_80154C24.o,ov_SC02_015_jr_801588CC.o,tail8.data.o,ov_SC02_015_jr_80159C84.o,tail9.data.o,ov_SC02_015_jr_8015A3C8.o,tail10.data.o,ov_SC02_015_jr_8015AE2C.o,tail11.data.o,ov_SC02_015_jr_8015C32C.o,tail12.data.o,ov_SC02_015_jr_8016AB6C.o,tail13.data.o,ov_SC02_015_jr_801734BC.o,tail14.data.o,ov_SC02_015_jr_80178D40.o,tail15.data.o,ov_SC02_015_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_015/ov_SC02_015_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_015/ov_SC02_015_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_015/ov_SC02_015_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -723,7 +723,7 @@ ov_SC02_016_ELF := $(ov_SC02_016_OUT).elf ov_SC02_016_MAPFILE := $(ov_SC02_016_OUT).map ov_SC02_016_LD_SCRIPT := $(ov_SC02_016_OUT).ld ov_SC02_016_SPLAT_YAML := config/splat.ov_SC02_016.yaml -ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016_jr_8012ACE0.o,tail2.data.o,ov_SC02_016_jr_801380E0.o,tail3.data.o,ov_SC02_016_jr_8013F350.o,tail4.data.o,ov_SC02_016_jr_8013FFD8.o,tail5.data.o,ov_SC02_016_jr_8015444C.o,tail6.data.o,ov_SC02_016_jr_80154C24.o,ov_SC02_016_jr_801588CC.o,tail7.data.o,ov_SC02_016_jr_80159C84.o,tail8.data.o,ov_SC02_016_jr_8015A3C8.o,tail9.data.o,ov_SC02_016_jr_8015AE2C.o,tail10.data.o,ov_SC02_016_jr_8015C32C.o,tail11.data.o,ov_SC02_016_jr_8016AB6C.o,tail12.data.o,ov_SC02_016_jr_801734BC.o,tail13.data.o,ov_SC02_016_jr_80178D40.o,tail14.data.o,ov_SC02_016_jr_8017A4AC.o,tail15.data.o,ov_SC02_016_jr_8017DC70.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016_jr_8012ACE0.o,tail2.data.o,ov_SC02_016_jr_801380E0.o,tail3.data.o,ov_SC02_016_jr_8013F350.o,tail4.data.o,ov_SC02_016_jr_8013FFD8.o,tail5.data.o,ov_SC02_016_jr_80140608.o,tail6.data.o,ov_SC02_016_jr_8015444C.o,tail7.data.o,ov_SC02_016_jr_80154C24.o,ov_SC02_016_jr_801588CC.o,tail8.data.o,ov_SC02_016_jr_80159C84.o,tail9.data.o,ov_SC02_016_jr_8015A3C8.o,tail10.data.o,ov_SC02_016_jr_8015AE2C.o,tail11.data.o,ov_SC02_016_jr_8015C32C.o,tail12.data.o,ov_SC02_016_jr_8016AB6C.o,tail13.data.o,ov_SC02_016_jr_801734BC.o,tail14.data.o,ov_SC02_016_jr_80178D40.o,tail15.data.o,ov_SC02_016_jr_8017A4AC.o,tail16.data.o,ov_SC02_016_jr_8017DC70.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_016/ov_SC02_016_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_016/ov_SC02_016_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_016/ov_SC02_016_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -750,7 +750,7 @@ ov_SC02_017_ELF := $(ov_SC02_017_OUT).elf ov_SC02_017_MAPFILE := $(ov_SC02_017_OUT).map ov_SC02_017_LD_SCRIPT := $(ov_SC02_017_OUT).ld ov_SC02_017_SPLAT_YAML := config/splat.ov_SC02_017.yaml -ov_SC02_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_017_jr_8012ACE0.o,tail2.data.o,ov_SC02_017_jr_801380E0.o,tail3.data.o,ov_SC02_017_jr_8013F350.o,tail4.data.o,ov_SC02_017_jr_8013FFD8.o,tail5.data.o,ov_SC02_017_jr_8015444C.o,tail6.data.o,ov_SC02_017_jr_80154C24.o,ov_SC02_017_jr_801588CC.o,tail7.data.o,ov_SC02_017_jr_80159C84.o,tail8.data.o,ov_SC02_017_jr_8015A3C8.o,tail9.data.o,ov_SC02_017_jr_8015AE2C.o,tail10.data.o,ov_SC02_017_jr_8015C32C.o,tail11.data.o,ov_SC02_017_jr_8016AB6C.o,tail12.data.o,ov_SC02_017_jr_801734BC.o,tail13.data.o,ov_SC02_017_jr_80178D40.o,tail14.data.o,ov_SC02_017_jr_8017A4AC.o,tail15.data.o,ov_SC02_017_jr_8017DF34.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_017_jr_8012ACE0.o,tail2.data.o,ov_SC02_017_jr_801380E0.o,tail3.data.o,ov_SC02_017_jr_8013F350.o,tail4.data.o,ov_SC02_017_jr_8013FFD8.o,tail5.data.o,ov_SC02_017_jr_80140608.o,tail6.data.o,ov_SC02_017_jr_8015444C.o,tail7.data.o,ov_SC02_017_jr_80154C24.o,ov_SC02_017_jr_801588CC.o,tail8.data.o,ov_SC02_017_jr_80159C84.o,tail9.data.o,ov_SC02_017_jr_8015A3C8.o,tail10.data.o,ov_SC02_017_jr_8015AE2C.o,tail11.data.o,ov_SC02_017_jr_8015C32C.o,tail12.data.o,ov_SC02_017_jr_8016AB6C.o,tail13.data.o,ov_SC02_017_jr_801734BC.o,tail14.data.o,ov_SC02_017_jr_80178D40.o,tail15.data.o,ov_SC02_017_jr_8017A4AC.o,tail16.data.o,ov_SC02_017_jr_8017DF34.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_017/ov_SC02_017_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_017/ov_SC02_017_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_017/ov_SC02_017_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -777,7 +777,7 @@ ov_SC02_021_ELF := $(ov_SC02_021_OUT).elf ov_SC02_021_MAPFILE := $(ov_SC02_021_OUT).map ov_SC02_021_LD_SCRIPT := $(ov_SC02_021_OUT).ld ov_SC02_021_SPLAT_YAML := config/splat.ov_SC02_021.yaml -ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021_jr_8012ACE0.o,tail2.data.o,ov_SC02_021_jr_801380E0.o,tail3.data.o,ov_SC02_021_jr_8013F350.o,tail4.data.o,ov_SC02_021_jr_8013FFD8.o,tail5.data.o,ov_SC02_021_jr_8015444C.o,tail6.data.o,ov_SC02_021_jr_80154C24.o,ov_SC02_021_jr_801588CC.o,tail7.data.o,ov_SC02_021_jr_80159C84.o,tail8.data.o,ov_SC02_021_jr_8015A3C8.o,tail9.data.o,ov_SC02_021_jr_8015AE2C.o,tail10.data.o,ov_SC02_021_jr_8015C32C.o,tail11.data.o,ov_SC02_021_jr_8016AB6C.o,tail12.data.o,ov_SC02_021_jr_801734BC.o,tail13.data.o,ov_SC02_021_jr_80178D40.o,tail14.data.o,ov_SC02_021_jr_8017A4AC.o,tail15.data.o,ov_SC02_021_jr_8017C294.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021_jr_8012ACE0.o,tail2.data.o,ov_SC02_021_jr_801380E0.o,tail3.data.o,ov_SC02_021_jr_8013F350.o,tail4.data.o,ov_SC02_021_jr_8013FFD8.o,tail5.data.o,ov_SC02_021_jr_80140608.o,tail6.data.o,ov_SC02_021_jr_8015444C.o,tail7.data.o,ov_SC02_021_jr_80154C24.o,ov_SC02_021_jr_801588CC.o,tail8.data.o,ov_SC02_021_jr_80159C84.o,tail9.data.o,ov_SC02_021_jr_8015A3C8.o,tail10.data.o,ov_SC02_021_jr_8015AE2C.o,tail11.data.o,ov_SC02_021_jr_8015C32C.o,tail12.data.o,ov_SC02_021_jr_8016AB6C.o,tail13.data.o,ov_SC02_021_jr_801734BC.o,tail14.data.o,ov_SC02_021_jr_80178D40.o,tail15.data.o,ov_SC02_021_jr_8017A4AC.o,tail16.data.o,ov_SC02_021_jr_8017C294.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_021/ov_SC02_021_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_021/ov_SC02_021_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_021/ov_SC02_021_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -804,7 +804,7 @@ ov_SC02_026_ELF := $(ov_SC02_026_OUT).elf ov_SC02_026_MAPFILE := $(ov_SC02_026_OUT).map ov_SC02_026_LD_SCRIPT := $(ov_SC02_026_OUT).ld ov_SC02_026_SPLAT_YAML := config/splat.ov_SC02_026.yaml -ov_SC02_026_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_026_jr_8012ACE0.o,tail2.data.o,ov_SC02_026_jr_801380E0.o,tail3.data.o,ov_SC02_026_jr_8013F350.o,tail4.data.o,ov_SC02_026_jr_8013FFD8.o,tail5.data.o,ov_SC02_026_jr_8015444C.o,tail6.data.o,ov_SC02_026_jr_80154C24.o,ov_SC02_026_jr_801588CC.o,tail7.data.o,ov_SC02_026_jr_80159C84.o,tail8.data.o,ov_SC02_026_jr_8015A3C8.o,tail9.data.o,ov_SC02_026_jr_8015AE2C.o,tail10.data.o,ov_SC02_026_jr_8015C32C.o,tail11.data.o,ov_SC02_026_jr_8016AB6C.o,tail12.data.o,ov_SC02_026_jr_801734BC.o,tail13.data.o,ov_SC02_026_jr_80178D40.o,tail14.data.o,ov_SC02_026_jr_8017A4AC.o,tail15.data.o,ov_SC02_026_jr_8017C180.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_026_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_026_jr_8012ACE0.o,tail2.data.o,ov_SC02_026_jr_801380E0.o,tail3.data.o,ov_SC02_026_jr_8013F350.o,tail4.data.o,ov_SC02_026_jr_8013FFD8.o,tail5.data.o,ov_SC02_026_jr_80140608.o,tail6.data.o,ov_SC02_026_jr_8015444C.o,tail7.data.o,ov_SC02_026_jr_80154C24.o,ov_SC02_026_jr_801588CC.o,tail8.data.o,ov_SC02_026_jr_80159C84.o,tail9.data.o,ov_SC02_026_jr_8015A3C8.o,tail10.data.o,ov_SC02_026_jr_8015AE2C.o,tail11.data.o,ov_SC02_026_jr_8015C32C.o,tail12.data.o,ov_SC02_026_jr_8016AB6C.o,tail13.data.o,ov_SC02_026_jr_801734BC.o,tail14.data.o,ov_SC02_026_jr_80178D40.o,tail15.data.o,ov_SC02_026_jr_8017A4AC.o,tail16.data.o,ov_SC02_026_jr_8017C180.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_026/ov_SC02_026_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_026/ov_SC02_026_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_026/ov_SC02_026_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -831,7 +831,7 @@ ov_SC02_027_ELF := $(ov_SC02_027_OUT).elf ov_SC02_027_MAPFILE := $(ov_SC02_027_OUT).map ov_SC02_027_LD_SCRIPT := $(ov_SC02_027_OUT).ld ov_SC02_027_SPLAT_YAML := config/splat.ov_SC02_027.yaml -ov_SC02_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_027_jr_8012ACE0.o,tail2.data.o,ov_SC02_027_jr_801380E0.o,tail3.data.o,ov_SC02_027_jr_8013F350.o,tail4.data.o,ov_SC02_027_jr_8013FFD8.o,tail5.data.o,ov_SC02_027_jr_8015444C.o,tail6.data.o,ov_SC02_027_jr_80154C24.o,ov_SC02_027_jr_801588CC.o,tail7.data.o,ov_SC02_027_jr_80159C84.o,tail8.data.o,ov_SC02_027_jr_8015A3C8.o,tail9.data.o,ov_SC02_027_jr_8015AE2C.o,tail10.data.o,ov_SC02_027_jr_8015C32C.o,tail11.data.o,ov_SC02_027_jr_8016AB6C.o,tail12.data.o,ov_SC02_027_jr_801734BC.o,tail13.data.o,ov_SC02_027_jr_80178D40.o,tail14.data.o,ov_SC02_027_jr_8017A4AC.o,tail15.data.o,ov_SC02_027_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_027_jr_8012ACE0.o,tail2.data.o,ov_SC02_027_jr_801380E0.o,tail3.data.o,ov_SC02_027_jr_8013F350.o,tail4.data.o,ov_SC02_027_jr_8013FFD8.o,tail5.data.o,ov_SC02_027_jr_80140608.o,tail6.data.o,ov_SC02_027_jr_8015444C.o,tail7.data.o,ov_SC02_027_jr_80154C24.o,ov_SC02_027_jr_801588CC.o,tail8.data.o,ov_SC02_027_jr_80159C84.o,tail9.data.o,ov_SC02_027_jr_8015A3C8.o,tail10.data.o,ov_SC02_027_jr_8015AE2C.o,tail11.data.o,ov_SC02_027_jr_8015C32C.o,tail12.data.o,ov_SC02_027_jr_8016AB6C.o,tail13.data.o,ov_SC02_027_jr_801734BC.o,tail14.data.o,ov_SC02_027_jr_80178D40.o,tail15.data.o,ov_SC02_027_jr_8017A4AC.o,tail16.data.o,ov_SC02_027_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_027/ov_SC02_027_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_027/ov_SC02_027_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_027/ov_SC02_027_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -858,7 +858,7 @@ ov_SC02_028_ELF := $(ov_SC02_028_OUT).elf ov_SC02_028_MAPFILE := $(ov_SC02_028_OUT).map ov_SC02_028_LD_SCRIPT := $(ov_SC02_028_OUT).ld ov_SC02_028_SPLAT_YAML := config/splat.ov_SC02_028.yaml -ov_SC02_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_028_jr_8012ACE0.o,tail2.data.o,ov_SC02_028_jr_801380E0.o,tail3.data.o,ov_SC02_028_jr_8013F350.o,tail4.data.o,ov_SC02_028_jr_8013FFD8.o,tail5.data.o,ov_SC02_028_jr_8015444C.o,tail6.data.o,ov_SC02_028_jr_80154C24.o,ov_SC02_028_jr_801588CC.o,tail7.data.o,ov_SC02_028_jr_80159C84.o,tail8.data.o,ov_SC02_028_jr_8015A3C8.o,tail9.data.o,ov_SC02_028_jr_8015AE2C.o,tail10.data.o,ov_SC02_028_jr_8015C32C.o,tail11.data.o,ov_SC02_028_jr_8016AB6C.o,tail12.data.o,ov_SC02_028_jr_801734BC.o,tail13.data.o,ov_SC02_028_jr_80178D40.o,tail14.data.o,ov_SC02_028_jr_8017A4AC.o,tail15.data.o,ov_SC02_028_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_028_jr_8012ACE0.o,tail2.data.o,ov_SC02_028_jr_801380E0.o,tail3.data.o,ov_SC02_028_jr_8013F350.o,tail4.data.o,ov_SC02_028_jr_8013FFD8.o,tail5.data.o,ov_SC02_028_jr_80140608.o,tail6.data.o,ov_SC02_028_jr_8015444C.o,tail7.data.o,ov_SC02_028_jr_80154C24.o,ov_SC02_028_jr_801588CC.o,tail8.data.o,ov_SC02_028_jr_80159C84.o,tail9.data.o,ov_SC02_028_jr_8015A3C8.o,tail10.data.o,ov_SC02_028_jr_8015AE2C.o,tail11.data.o,ov_SC02_028_jr_8015C32C.o,tail12.data.o,ov_SC02_028_jr_8016AB6C.o,tail13.data.o,ov_SC02_028_jr_801734BC.o,tail14.data.o,ov_SC02_028_jr_80178D40.o,tail15.data.o,ov_SC02_028_jr_8017A4AC.o,tail16.data.o,ov_SC02_028_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_028/ov_SC02_028_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_028/ov_SC02_028_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_028/ov_SC02_028_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -885,7 +885,7 @@ ov_SC02_031_ELF := $(ov_SC02_031_OUT).elf ov_SC02_031_MAPFILE := $(ov_SC02_031_OUT).map ov_SC02_031_LD_SCRIPT := $(ov_SC02_031_OUT).ld ov_SC02_031_SPLAT_YAML := config/splat.ov_SC02_031.yaml -ov_SC02_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_031_jr_8012ACE0.o,tail2.data.o,ov_SC02_031_jr_801380E0.o,tail3.data.o,ov_SC02_031_jr_8013F350.o,tail4.data.o,ov_SC02_031_jr_8013FFD8.o,tail5.data.o,ov_SC02_031_jr_8015444C.o,tail6.data.o,ov_SC02_031_jr_80154C24.o,ov_SC02_031_jr_801588CC.o,tail7.data.o,ov_SC02_031_jr_80159C84.o,tail8.data.o,ov_SC02_031_jr_8015A3C8.o,tail9.data.o,ov_SC02_031_jr_8015AE2C.o,tail10.data.o,ov_SC02_031_jr_8015C32C.o,tail11.data.o,ov_SC02_031_jr_8016AB6C.o,tail12.data.o,ov_SC02_031_jr_801734BC.o,tail13.data.o,ov_SC02_031_jr_80178D40.o,tail14.data.o,ov_SC02_031_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_031_jr_8012ACE0.o,tail2.data.o,ov_SC02_031_jr_801380E0.o,tail3.data.o,ov_SC02_031_jr_8013F350.o,tail4.data.o,ov_SC02_031_jr_8013FFD8.o,tail5.data.o,ov_SC02_031_jr_80140608.o,tail6.data.o,ov_SC02_031_jr_8015444C.o,tail7.data.o,ov_SC02_031_jr_80154C24.o,ov_SC02_031_jr_801588CC.o,tail8.data.o,ov_SC02_031_jr_80159C84.o,tail9.data.o,ov_SC02_031_jr_8015A3C8.o,tail10.data.o,ov_SC02_031_jr_8015AE2C.o,tail11.data.o,ov_SC02_031_jr_8015C32C.o,tail12.data.o,ov_SC02_031_jr_8016AB6C.o,tail13.data.o,ov_SC02_031_jr_801734BC.o,tail14.data.o,ov_SC02_031_jr_80178D40.o,tail15.data.o,ov_SC02_031_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_031/ov_SC02_031_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_031/ov_SC02_031_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_031/ov_SC02_031_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -912,7 +912,7 @@ ov_SC02_035_ELF := $(ov_SC02_035_OUT).elf ov_SC02_035_MAPFILE := $(ov_SC02_035_OUT).map ov_SC02_035_LD_SCRIPT := $(ov_SC02_035_OUT).ld ov_SC02_035_SPLAT_YAML := config/splat.ov_SC02_035.yaml -ov_SC02_035_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_035_jr_8012ACE0.o,tail2.data.o,ov_SC02_035_jr_801380E0.o,tail3.data.o,ov_SC02_035_jr_8013F350.o,tail4.data.o,ov_SC02_035_jr_8013FFD8.o,tail5.data.o,ov_SC02_035_jr_8015444C.o,tail6.data.o,ov_SC02_035_jr_80154C24.o,ov_SC02_035_jr_801588CC.o,tail7.data.o,ov_SC02_035_jr_80159C84.o,tail8.data.o,ov_SC02_035_jr_8015A3C8.o,tail9.data.o,ov_SC02_035_jr_8015AE2C.o,tail10.data.o,ov_SC02_035_jr_8015C32C.o,tail11.data.o,ov_SC02_035_jr_8016AB6C.o,tail12.data.o,ov_SC02_035_jr_801734BC.o,tail13.data.o,ov_SC02_035_jr_80178D40.o,tail14.data.o,ov_SC02_035_jr_8017A4AC.o,tail15.data.o,ov_SC02_035_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_035_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_035_jr_8012ACE0.o,tail2.data.o,ov_SC02_035_jr_801380E0.o,tail3.data.o,ov_SC02_035_jr_8013F350.o,tail4.data.o,ov_SC02_035_jr_8013FFD8.o,tail5.data.o,ov_SC02_035_jr_80140608.o,tail6.data.o,ov_SC02_035_jr_8015444C.o,tail7.data.o,ov_SC02_035_jr_80154C24.o,ov_SC02_035_jr_801588CC.o,tail8.data.o,ov_SC02_035_jr_80159C84.o,tail9.data.o,ov_SC02_035_jr_8015A3C8.o,tail10.data.o,ov_SC02_035_jr_8015AE2C.o,tail11.data.o,ov_SC02_035_jr_8015C32C.o,tail12.data.o,ov_SC02_035_jr_8016AB6C.o,tail13.data.o,ov_SC02_035_jr_801734BC.o,tail14.data.o,ov_SC02_035_jr_80178D40.o,tail15.data.o,ov_SC02_035_jr_8017A4AC.o,tail16.data.o,ov_SC02_035_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_035/ov_SC02_035_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_035/ov_SC02_035_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_035/ov_SC02_035_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -939,7 +939,7 @@ ov_SC02_039_ELF := $(ov_SC02_039_OUT).elf ov_SC02_039_MAPFILE := $(ov_SC02_039_OUT).map ov_SC02_039_LD_SCRIPT := $(ov_SC02_039_OUT).ld ov_SC02_039_SPLAT_YAML := config/splat.ov_SC02_039.yaml -ov_SC02_039_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_039_jr_8012ACE0.o,tail2.data.o,ov_SC02_039_jr_801380E0.o,tail3.data.o,ov_SC02_039_jr_8013F350.o,tail4.data.o,ov_SC02_039_jr_8013FFD8.o,tail5.data.o,ov_SC02_039_jr_8015444C.o,tail6.data.o,ov_SC02_039_jr_80154C24.o,ov_SC02_039_jr_801588CC.o,tail7.data.o,ov_SC02_039_jr_80159C84.o,tail8.data.o,ov_SC02_039_jr_8015A3C8.o,tail9.data.o,ov_SC02_039_jr_8015AE2C.o,tail10.data.o,ov_SC02_039_jr_8015C32C.o,tail11.data.o,ov_SC02_039_jr_8016AB6C.o,tail12.data.o,ov_SC02_039_jr_801734BC.o,tail13.data.o,ov_SC02_039_jr_80178D40.o,tail14.data.o,ov_SC02_039_jr_8017A4AC.o,tail15.data.o,ov_SC02_039_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_039_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_039_jr_8012ACE0.o,tail2.data.o,ov_SC02_039_jr_801380E0.o,tail3.data.o,ov_SC02_039_jr_8013F350.o,tail4.data.o,ov_SC02_039_jr_8013FFD8.o,tail5.data.o,ov_SC02_039_jr_80140608.o,tail6.data.o,ov_SC02_039_jr_8015444C.o,tail7.data.o,ov_SC02_039_jr_80154C24.o,ov_SC02_039_jr_801588CC.o,tail8.data.o,ov_SC02_039_jr_80159C84.o,tail9.data.o,ov_SC02_039_jr_8015A3C8.o,tail10.data.o,ov_SC02_039_jr_8015AE2C.o,tail11.data.o,ov_SC02_039_jr_8015C32C.o,tail12.data.o,ov_SC02_039_jr_8016AB6C.o,tail13.data.o,ov_SC02_039_jr_801734BC.o,tail14.data.o,ov_SC02_039_jr_80178D40.o,tail15.data.o,ov_SC02_039_jr_8017A4AC.o,tail16.data.o,ov_SC02_039_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_039/ov_SC02_039_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_039/ov_SC02_039_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_039/ov_SC02_039_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -966,7 +966,7 @@ ov_SC02_041_ELF := $(ov_SC02_041_OUT).elf ov_SC02_041_MAPFILE := $(ov_SC02_041_OUT).map ov_SC02_041_LD_SCRIPT := $(ov_SC02_041_OUT).ld ov_SC02_041_SPLAT_YAML := config/splat.ov_SC02_041.yaml -ov_SC02_041_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_041_jr_8012ACE0.o,tail2.data.o,ov_SC02_041_jr_801380E0.o,tail3.data.o,ov_SC02_041_jr_8013F350.o,tail4.data.o,ov_SC02_041_jr_8013FFD8.o,tail5.data.o,ov_SC02_041_jr_8015444C.o,tail6.data.o,ov_SC02_041_jr_80154C24.o,ov_SC02_041_jr_801588CC.o,tail7.data.o,ov_SC02_041_jr_80159C84.o,tail8.data.o,ov_SC02_041_jr_8015A3C8.o,tail9.data.o,ov_SC02_041_jr_8015AE2C.o,tail10.data.o,ov_SC02_041_jr_8015C32C.o,tail11.data.o,ov_SC02_041_jr_8016AB6C.o,tail12.data.o,ov_SC02_041_jr_801734BC.o,tail13.data.o,ov_SC02_041_jr_80178D40.o,tail14.data.o,ov_SC02_041_jr_8017A4AC.o,tail15.data.o,ov_SC02_041_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_041_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_041_jr_8012ACE0.o,tail2.data.o,ov_SC02_041_jr_801380E0.o,tail3.data.o,ov_SC02_041_jr_8013F350.o,tail4.data.o,ov_SC02_041_jr_8013FFD8.o,tail5.data.o,ov_SC02_041_jr_80140608.o,tail6.data.o,ov_SC02_041_jr_8015444C.o,tail7.data.o,ov_SC02_041_jr_80154C24.o,ov_SC02_041_jr_801588CC.o,tail8.data.o,ov_SC02_041_jr_80159C84.o,tail9.data.o,ov_SC02_041_jr_8015A3C8.o,tail10.data.o,ov_SC02_041_jr_8015AE2C.o,tail11.data.o,ov_SC02_041_jr_8015C32C.o,tail12.data.o,ov_SC02_041_jr_8016AB6C.o,tail13.data.o,ov_SC02_041_jr_801734BC.o,tail14.data.o,ov_SC02_041_jr_80178D40.o,tail15.data.o,ov_SC02_041_jr_8017A4AC.o,tail16.data.o,ov_SC02_041_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_041/ov_SC02_041_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC02_041/ov_SC02_041_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_041/ov_SC02_041_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -993,7 +993,7 @@ ov_SC03_003_ELF := $(ov_SC03_003_OUT).elf ov_SC03_003_MAPFILE := $(ov_SC03_003_OUT).map ov_SC03_003_LD_SCRIPT := $(ov_SC03_003_OUT).ld ov_SC03_003_SPLAT_YAML := config/splat.ov_SC03_003.yaml -ov_SC03_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_003_jr_8012ACE0.o,tail2.data.o,ov_SC03_003_jr_801380E0.o,tail3.data.o,ov_SC03_003_jr_8013F350.o,tail4.data.o,ov_SC03_003_jr_8013FFD8.o,tail5.data.o,ov_SC03_003_jr_8015444C.o,tail6.data.o,ov_SC03_003_jr_80154C24.o,ov_SC03_003_jr_801588CC.o,tail7.data.o,ov_SC03_003_jr_80159C84.o,tail8.data.o,ov_SC03_003_jr_8015A3C8.o,tail9.data.o,ov_SC03_003_jr_8015AE2C.o,tail10.data.o,ov_SC03_003_jr_8015C32C.o,tail11.data.o,ov_SC03_003_jr_8016AB6C.o,tail12.data.o,ov_SC03_003_jr_801734BC.o,tail13.data.o,ov_SC03_003_jr_80178D40.o,tail14.data.o,ov_SC03_003_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_003_jr_8012ACE0.o,tail2.data.o,ov_SC03_003_jr_801380E0.o,tail3.data.o,ov_SC03_003_jr_8013F350.o,tail4.data.o,ov_SC03_003_jr_8013FFD8.o,tail5.data.o,ov_SC03_003_jr_80140608.o,tail6.data.o,ov_SC03_003_jr_8015444C.o,tail7.data.o,ov_SC03_003_jr_80154C24.o,ov_SC03_003_jr_801588CC.o,tail8.data.o,ov_SC03_003_jr_80159C84.o,tail9.data.o,ov_SC03_003_jr_8015A3C8.o,tail10.data.o,ov_SC03_003_jr_8015AE2C.o,tail11.data.o,ov_SC03_003_jr_8015C32C.o,tail12.data.o,ov_SC03_003_jr_8016AB6C.o,tail13.data.o,ov_SC03_003_jr_801734BC.o,tail14.data.o,ov_SC03_003_jr_80178D40.o,tail15.data.o,ov_SC03_003_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_003/ov_SC03_003_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_003/ov_SC03_003_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_003/ov_SC03_003_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1020,7 +1020,7 @@ ov_SC03_007_ELF := $(ov_SC03_007_OUT).elf ov_SC03_007_MAPFILE := $(ov_SC03_007_OUT).map ov_SC03_007_LD_SCRIPT := $(ov_SC03_007_OUT).ld ov_SC03_007_SPLAT_YAML := config/splat.ov_SC03_007.yaml -ov_SC03_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_007_jr_8012ACE0.o,tail2.data.o,ov_SC03_007_jr_801380E0.o,tail3.data.o,ov_SC03_007_jr_8013F350.o,tail4.data.o,ov_SC03_007_jr_8013FFD8.o,tail5.data.o,ov_SC03_007_jr_8015444C.o,tail6.data.o,ov_SC03_007_jr_80154C24.o,ov_SC03_007_jr_801588CC.o,tail7.data.o,ov_SC03_007_jr_80159C84.o,tail8.data.o,ov_SC03_007_jr_8015A3C8.o,tail9.data.o,ov_SC03_007_jr_8015AE2C.o,tail10.data.o,ov_SC03_007_jr_8015C32C.o,tail11.data.o,ov_SC03_007_jr_8016AB6C.o,tail12.data.o,ov_SC03_007_jr_801734BC.o,tail13.data.o,ov_SC03_007_jr_80178D40.o,tail14.data.o,ov_SC03_007_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_007_jr_8012ACE0.o,tail2.data.o,ov_SC03_007_jr_801380E0.o,tail3.data.o,ov_SC03_007_jr_8013F350.o,tail4.data.o,ov_SC03_007_jr_8013FFD8.o,tail5.data.o,ov_SC03_007_jr_80140608.o,tail6.data.o,ov_SC03_007_jr_8015444C.o,tail7.data.o,ov_SC03_007_jr_80154C24.o,ov_SC03_007_jr_801588CC.o,tail8.data.o,ov_SC03_007_jr_80159C84.o,tail9.data.o,ov_SC03_007_jr_8015A3C8.o,tail10.data.o,ov_SC03_007_jr_8015AE2C.o,tail11.data.o,ov_SC03_007_jr_8015C32C.o,tail12.data.o,ov_SC03_007_jr_8016AB6C.o,tail13.data.o,ov_SC03_007_jr_801734BC.o,tail14.data.o,ov_SC03_007_jr_80178D40.o,tail15.data.o,ov_SC03_007_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_007/ov_SC03_007_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_007/ov_SC03_007_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_007/ov_SC03_007_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1047,7 +1047,7 @@ ov_SC03_010_ELF := $(ov_SC03_010_OUT).elf ov_SC03_010_MAPFILE := $(ov_SC03_010_OUT).map ov_SC03_010_LD_SCRIPT := $(ov_SC03_010_OUT).ld ov_SC03_010_SPLAT_YAML := config/splat.ov_SC03_010.yaml -ov_SC03_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_010_jr_8012ACE0.o,tail2.data.o,ov_SC03_010_jr_801380E0.o,tail3.data.o,ov_SC03_010_jr_8013F350.o,tail4.data.o,ov_SC03_010_jr_8013FFD8.o,tail5.data.o,ov_SC03_010_jr_8015444C.o,tail6.data.o,ov_SC03_010_jr_80154C24.o,ov_SC03_010_jr_801588CC.o,tail7.data.o,ov_SC03_010_jr_80159C84.o,tail8.data.o,ov_SC03_010_jr_8015A3C8.o,tail9.data.o,ov_SC03_010_jr_8015AE2C.o,tail10.data.o,ov_SC03_010_jr_8015C32C.o,tail11.data.o,ov_SC03_010_jr_8016AB6C.o,tail12.data.o,ov_SC03_010_jr_801734BC.o,tail13.data.o,ov_SC03_010_jr_80178D40.o,tail14.data.o,ov_SC03_010_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_010_jr_8012ACE0.o,tail2.data.o,ov_SC03_010_jr_801380E0.o,tail3.data.o,ov_SC03_010_jr_8013F350.o,tail4.data.o,ov_SC03_010_jr_8013FFD8.o,tail5.data.o,ov_SC03_010_jr_80140608.o,tail6.data.o,ov_SC03_010_jr_8015444C.o,tail7.data.o,ov_SC03_010_jr_80154C24.o,ov_SC03_010_jr_801588CC.o,tail8.data.o,ov_SC03_010_jr_80159C84.o,tail9.data.o,ov_SC03_010_jr_8015A3C8.o,tail10.data.o,ov_SC03_010_jr_8015AE2C.o,tail11.data.o,ov_SC03_010_jr_8015C32C.o,tail12.data.o,ov_SC03_010_jr_8016AB6C.o,tail13.data.o,ov_SC03_010_jr_801734BC.o,tail14.data.o,ov_SC03_010_jr_80178D40.o,tail15.data.o,ov_SC03_010_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_010/ov_SC03_010_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_010/ov_SC03_010_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_010/ov_SC03_010_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1074,7 +1074,7 @@ ov_SC03_011_ELF := $(ov_SC03_011_OUT).elf ov_SC03_011_MAPFILE := $(ov_SC03_011_OUT).map ov_SC03_011_LD_SCRIPT := $(ov_SC03_011_OUT).ld ov_SC03_011_SPLAT_YAML := config/splat.ov_SC03_011.yaml -ov_SC03_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_011_jr_8012ACE0.o,tail2.data.o,ov_SC03_011_jr_801380E0.o,tail3.data.o,ov_SC03_011_jr_8013F350.o,tail4.data.o,ov_SC03_011_jr_8015444C.o,tail5.data.o,ov_SC03_011_jr_80154C24.o,ov_SC03_011_jr_801588CC.o,tail6.data.o,ov_SC03_011_jr_80159C84.o,tail7.data.o,ov_SC03_011_jr_8015A3C8.o,tail8.data.o,ov_SC03_011_jr_8015AE2C.o,tail9.data.o,ov_SC03_011_jr_8015C32C.o,tail10.data.o,ov_SC03_011_jr_8016AB6C.o,tail11.data.o,ov_SC03_011_jr_801734BC.o,tail12.data.o,ov_SC03_011_jr_80178D40.o,tail13.data.o,ov_SC03_011_jr_8017A4AC.o,tail14.data.o,ov_SC03_011_jr_8017C730.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_011_jr_8012ACE0.o,tail2.data.o,ov_SC03_011_jr_801380E0.o,tail3.data.o,ov_SC03_011_jr_8013F350.o,tail4.data.o,ov_SC03_011_jr_80140608.o,tail5.data.o,ov_SC03_011_jr_8015444C.o,tail6.data.o,ov_SC03_011_jr_80154C24.o,ov_SC03_011_jr_801588CC.o,tail7.data.o,ov_SC03_011_jr_80159C84.o,tail8.data.o,ov_SC03_011_jr_8015A3C8.o,tail9.data.o,ov_SC03_011_jr_8015AE2C.o,tail10.data.o,ov_SC03_011_jr_8015C32C.o,tail11.data.o,ov_SC03_011_jr_8016AB6C.o,tail12.data.o,ov_SC03_011_jr_801734BC.o,tail13.data.o,ov_SC03_011_jr_80178D40.o,tail14.data.o,ov_SC03_011_jr_8017A4AC.o,tail15.data.o,ov_SC03_011_jr_8017C730.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_011/ov_SC03_011_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_011/ov_SC03_011_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_011/ov_SC03_011_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1101,7 +1101,7 @@ ov_SC03_012_ELF := $(ov_SC03_012_OUT).elf ov_SC03_012_MAPFILE := $(ov_SC03_012_OUT).map ov_SC03_012_LD_SCRIPT := $(ov_SC03_012_OUT).ld ov_SC03_012_SPLAT_YAML := config/splat.ov_SC03_012.yaml -ov_SC03_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_012_jr_8012ACE0.o,tail2.data.o,ov_SC03_012_jr_801380E0.o,tail3.data.o,ov_SC03_012_jr_8013F350.o,tail4.data.o,ov_SC03_012_jr_8013FFD8.o,tail5.data.o,ov_SC03_012_jr_8015444C.o,tail6.data.o,ov_SC03_012_jr_80154C24.o,ov_SC03_012_jr_801588CC.o,tail7.data.o,ov_SC03_012_jr_80159C84.o,tail8.data.o,ov_SC03_012_jr_8015A3C8.o,tail9.data.o,ov_SC03_012_jr_8015AE2C.o,tail10.data.o,ov_SC03_012_jr_8015C32C.o,tail11.data.o,ov_SC03_012_jr_8016AB6C.o,tail12.data.o,ov_SC03_012_jr_801734BC.o,tail13.data.o,ov_SC03_012_jr_80178D40.o,tail14.data.o,ov_SC03_012_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_012_jr_8012ACE0.o,tail2.data.o,ov_SC03_012_jr_801380E0.o,tail3.data.o,ov_SC03_012_jr_8013F350.o,tail4.data.o,ov_SC03_012_jr_8013FFD8.o,tail5.data.o,ov_SC03_012_jr_80140608.o,tail6.data.o,ov_SC03_012_jr_8015444C.o,tail7.data.o,ov_SC03_012_jr_80154C24.o,ov_SC03_012_jr_801588CC.o,tail8.data.o,ov_SC03_012_jr_80159C84.o,tail9.data.o,ov_SC03_012_jr_8015A3C8.o,tail10.data.o,ov_SC03_012_jr_8015AE2C.o,tail11.data.o,ov_SC03_012_jr_8015C32C.o,tail12.data.o,ov_SC03_012_jr_8016AB6C.o,tail13.data.o,ov_SC03_012_jr_801734BC.o,tail14.data.o,ov_SC03_012_jr_80178D40.o,tail15.data.o,ov_SC03_012_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_012/ov_SC03_012_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_012/ov_SC03_012_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_012/ov_SC03_012_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1128,7 +1128,7 @@ ov_SC03_013_ELF := $(ov_SC03_013_OUT).elf ov_SC03_013_MAPFILE := $(ov_SC03_013_OUT).map ov_SC03_013_LD_SCRIPT := $(ov_SC03_013_OUT).ld ov_SC03_013_SPLAT_YAML := config/splat.ov_SC03_013.yaml -ov_SC03_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_013_jr_8012ACE0.o,tail2.data.o,ov_SC03_013_jr_801380E0.o,tail3.data.o,ov_SC03_013_jr_8013F350.o,tail4.data.o,ov_SC03_013_jr_8013FFD8.o,tail5.data.o,ov_SC03_013_jr_8015444C.o,tail6.data.o,ov_SC03_013_jr_80154C24.o,ov_SC03_013_jr_801588CC.o,tail7.data.o,ov_SC03_013_jr_80159C84.o,tail8.data.o,ov_SC03_013_jr_8015A3C8.o,tail9.data.o,ov_SC03_013_jr_8015AE2C.o,tail10.data.o,ov_SC03_013_jr_8015C32C.o,tail11.data.o,ov_SC03_013_jr_8016AB6C.o,tail12.data.o,ov_SC03_013_jr_801734BC.o,tail13.data.o,ov_SC03_013_jr_80178D40.o,tail14.data.o,ov_SC03_013_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_013_jr_8012ACE0.o,tail2.data.o,ov_SC03_013_jr_801380E0.o,tail3.data.o,ov_SC03_013_jr_8013F350.o,tail4.data.o,ov_SC03_013_jr_8013FFD8.o,tail5.data.o,ov_SC03_013_jr_80140608.o,tail6.data.o,ov_SC03_013_jr_8015444C.o,tail7.data.o,ov_SC03_013_jr_80154C24.o,ov_SC03_013_jr_801588CC.o,tail8.data.o,ov_SC03_013_jr_80159C84.o,tail9.data.o,ov_SC03_013_jr_8015A3C8.o,tail10.data.o,ov_SC03_013_jr_8015AE2C.o,tail11.data.o,ov_SC03_013_jr_8015C32C.o,tail12.data.o,ov_SC03_013_jr_8016AB6C.o,tail13.data.o,ov_SC03_013_jr_801734BC.o,tail14.data.o,ov_SC03_013_jr_80178D40.o,tail15.data.o,ov_SC03_013_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_013/ov_SC03_013_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_013/ov_SC03_013_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_013/ov_SC03_013_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1155,7 +1155,7 @@ ov_SC03_014_ELF := $(ov_SC03_014_OUT).elf ov_SC03_014_MAPFILE := $(ov_SC03_014_OUT).map ov_SC03_014_LD_SCRIPT := $(ov_SC03_014_OUT).ld ov_SC03_014_SPLAT_YAML := config/splat.ov_SC03_014.yaml -ov_SC03_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_014_jr_8012ACE0.o,tail2.data.o,ov_SC03_014_jr_801380E0.o,tail3.data.o,ov_SC03_014_jr_8013F350.o,tail4.data.o,ov_SC03_014_jr_8013FFD8.o,tail5.data.o,ov_SC03_014_jr_8015444C.o,tail6.data.o,ov_SC03_014_jr_80154C24.o,ov_SC03_014_jr_801588CC.o,tail7.data.o,ov_SC03_014_jr_80159C84.o,tail8.data.o,ov_SC03_014_jr_8015A3C8.o,tail9.data.o,ov_SC03_014_jr_8015AE2C.o,tail10.data.o,ov_SC03_014_jr_8015C32C.o,tail11.data.o,ov_SC03_014_jr_8016AB6C.o,tail12.data.o,ov_SC03_014_jr_801734BC.o,tail13.data.o,ov_SC03_014_jr_80178D40.o,tail14.data.o,ov_SC03_014_jr_8017A4AC.o,tail15.data.o,ov_SC03_014_jr_8017EB7C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_014_jr_8012ACE0.o,tail2.data.o,ov_SC03_014_jr_801380E0.o,tail3.data.o,ov_SC03_014_jr_8013F350.o,tail4.data.o,ov_SC03_014_jr_8013FFD8.o,tail5.data.o,ov_SC03_014_jr_80140608.o,tail6.data.o,ov_SC03_014_jr_8015444C.o,tail7.data.o,ov_SC03_014_jr_80154C24.o,ov_SC03_014_jr_801588CC.o,tail8.data.o,ov_SC03_014_jr_80159C84.o,tail9.data.o,ov_SC03_014_jr_8015A3C8.o,tail10.data.o,ov_SC03_014_jr_8015AE2C.o,tail11.data.o,ov_SC03_014_jr_8015C32C.o,tail12.data.o,ov_SC03_014_jr_8016AB6C.o,tail13.data.o,ov_SC03_014_jr_801734BC.o,tail14.data.o,ov_SC03_014_jr_80178D40.o,tail15.data.o,ov_SC03_014_jr_8017A4AC.o,tail16.data.o,ov_SC03_014_jr_8017EB7C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1182,7 +1182,7 @@ ov_SC03_015_ELF := $(ov_SC03_015_OUT).elf ov_SC03_015_MAPFILE := $(ov_SC03_015_OUT).map ov_SC03_015_LD_SCRIPT := $(ov_SC03_015_OUT).ld ov_SC03_015_SPLAT_YAML := config/splat.ov_SC03_015.yaml -ov_SC03_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_015_jr_8012ACE0.o,tail2.data.o,ov_SC03_015_jr_801380E0.o,tail3.data.o,ov_SC03_015_jr_8013F350.o,tail4.data.o,ov_SC03_015_jr_8013FFD8.o,tail5.data.o,ov_SC03_015_jr_8015444C.o,tail6.data.o,ov_SC03_015_jr_80154C24.o,ov_SC03_015_jr_801588CC.o,tail7.data.o,ov_SC03_015_jr_80159C84.o,tail8.data.o,ov_SC03_015_jr_8015A3C8.o,tail9.data.o,ov_SC03_015_jr_8015AE2C.o,tail10.data.o,ov_SC03_015_jr_8015C32C.o,tail11.data.o,ov_SC03_015_jr_8016AB6C.o,tail12.data.o,ov_SC03_015_jr_801734BC.o,tail13.data.o,ov_SC03_015_jr_80178D40.o,tail14.data.o,ov_SC03_015_jr_8017A4AC.o,tail15.data.o,ov_SC03_015_jr_8017EB7C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_015_jr_8012ACE0.o,tail2.data.o,ov_SC03_015_jr_801380E0.o,tail3.data.o,ov_SC03_015_jr_8013F350.o,tail4.data.o,ov_SC03_015_jr_8013FFD8.o,tail5.data.o,ov_SC03_015_jr_80140608.o,tail6.data.o,ov_SC03_015_jr_8015444C.o,tail7.data.o,ov_SC03_015_jr_80154C24.o,ov_SC03_015_jr_801588CC.o,tail8.data.o,ov_SC03_015_jr_80159C84.o,tail9.data.o,ov_SC03_015_jr_8015A3C8.o,tail10.data.o,ov_SC03_015_jr_8015AE2C.o,tail11.data.o,ov_SC03_015_jr_8015C32C.o,tail12.data.o,ov_SC03_015_jr_8016AB6C.o,tail13.data.o,ov_SC03_015_jr_801734BC.o,tail14.data.o,ov_SC03_015_jr_80178D40.o,tail15.data.o,ov_SC03_015_jr_8017A4AC.o,tail16.data.o,ov_SC03_015_jr_8017EB7C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1209,7 +1209,7 @@ ov_SC03_023_ELF := $(ov_SC03_023_OUT).elf ov_SC03_023_MAPFILE := $(ov_SC03_023_OUT).map ov_SC03_023_LD_SCRIPT := $(ov_SC03_023_OUT).ld ov_SC03_023_SPLAT_YAML := config/splat.ov_SC03_023.yaml -ov_SC03_023_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_023_jr_8012ACE0.o,tail2.data.o,ov_SC03_023_jr_801380E0.o,tail3.data.o,ov_SC03_023_jr_8013F350.o,tail4.data.o,ov_SC03_023_jr_8013FFD8.o,tail5.data.o,ov_SC03_023_jr_8015444C.o,tail6.data.o,ov_SC03_023_jr_80154C24.o,ov_SC03_023_jr_801588CC.o,tail7.data.o,ov_SC03_023_jr_80159C84.o,tail8.data.o,ov_SC03_023_jr_8015A3C8.o,tail9.data.o,ov_SC03_023_jr_8015AE2C.o,tail10.data.o,ov_SC03_023_jr_8015C32C.o,tail11.data.o,ov_SC03_023_jr_8016AB6C.o,tail12.data.o,ov_SC03_023_jr_801734BC.o,tail13.data.o,ov_SC03_023_jr_80178D40.o,tail14.data.o,ov_SC03_023_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_023_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_023_jr_8012ACE0.o,tail2.data.o,ov_SC03_023_jr_801380E0.o,tail3.data.o,ov_SC03_023_jr_8013F350.o,tail4.data.o,ov_SC03_023_jr_8013FFD8.o,tail5.data.o,ov_SC03_023_jr_80140608.o,tail6.data.o,ov_SC03_023_jr_8015444C.o,tail7.data.o,ov_SC03_023_jr_80154C24.o,ov_SC03_023_jr_801588CC.o,tail8.data.o,ov_SC03_023_jr_80159C84.o,tail9.data.o,ov_SC03_023_jr_8015A3C8.o,tail10.data.o,ov_SC03_023_jr_8015AE2C.o,tail11.data.o,ov_SC03_023_jr_8015C32C.o,tail12.data.o,ov_SC03_023_jr_8016AB6C.o,tail13.data.o,ov_SC03_023_jr_801734BC.o,tail14.data.o,ov_SC03_023_jr_80178D40.o,tail15.data.o,ov_SC03_023_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_023/ov_SC03_023_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_023/ov_SC03_023_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_023/ov_SC03_023_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1236,7 +1236,7 @@ ov_SC03_024_ELF := $(ov_SC03_024_OUT).elf ov_SC03_024_MAPFILE := $(ov_SC03_024_OUT).map ov_SC03_024_LD_SCRIPT := $(ov_SC03_024_OUT).ld ov_SC03_024_SPLAT_YAML := config/splat.ov_SC03_024.yaml -ov_SC03_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_024_jr_8012ACE0.o,tail2.data.o,ov_SC03_024_jr_801380E0.o,tail3.data.o,ov_SC03_024_jr_8013F350.o,tail4.data.o,ov_SC03_024_jr_8013FFD8.o,tail5.data.o,ov_SC03_024_jr_8015444C.o,tail6.data.o,ov_SC03_024_jr_80154C24.o,ov_SC03_024_jr_801588CC.o,tail7.data.o,ov_SC03_024_jr_80159C84.o,tail8.data.o,ov_SC03_024_jr_8015A3C8.o,tail9.data.o,ov_SC03_024_jr_8015AE2C.o,tail10.data.o,ov_SC03_024_jr_8015C32C.o,tail11.data.o,ov_SC03_024_jr_8016AB6C.o,tail12.data.o,ov_SC03_024_jr_801734BC.o,tail13.data.o,ov_SC03_024_jr_80178D40.o,tail14.data.o,ov_SC03_024_jr_8017A4AC.o,tail15.data.o,ov_SC03_024_jr_8017DF84.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_024_jr_8012ACE0.o,tail2.data.o,ov_SC03_024_jr_801380E0.o,tail3.data.o,ov_SC03_024_jr_8013F350.o,tail4.data.o,ov_SC03_024_jr_8013FFD8.o,tail5.data.o,ov_SC03_024_jr_80140608.o,tail6.data.o,ov_SC03_024_jr_8015444C.o,tail7.data.o,ov_SC03_024_jr_80154C24.o,ov_SC03_024_jr_801588CC.o,tail8.data.o,ov_SC03_024_jr_80159C84.o,tail9.data.o,ov_SC03_024_jr_8015A3C8.o,tail10.data.o,ov_SC03_024_jr_8015AE2C.o,tail11.data.o,ov_SC03_024_jr_8015C32C.o,tail12.data.o,ov_SC03_024_jr_8016AB6C.o,tail13.data.o,ov_SC03_024_jr_801734BC.o,tail14.data.o,ov_SC03_024_jr_80178D40.o,tail15.data.o,ov_SC03_024_jr_8017A4AC.o,tail16.data.o,ov_SC03_024_jr_8017DF84.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_024/ov_SC03_024_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_024/ov_SC03_024_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_024/ov_SC03_024_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1263,7 +1263,7 @@ ov_SC03_028_ELF := $(ov_SC03_028_OUT).elf ov_SC03_028_MAPFILE := $(ov_SC03_028_OUT).map ov_SC03_028_LD_SCRIPT := $(ov_SC03_028_OUT).ld ov_SC03_028_SPLAT_YAML := config/splat.ov_SC03_028.yaml -ov_SC03_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_028_jr_8012ACE0.o,tail2.data.o,ov_SC03_028_jr_801380E0.o,tail3.data.o,ov_SC03_028_jr_8013F350.o,tail4.data.o,ov_SC03_028_jr_8013FFD8.o,tail5.data.o,ov_SC03_028_jr_8015444C.o,tail6.data.o,ov_SC03_028_jr_80154C24.o,ov_SC03_028_jr_801588CC.o,tail7.data.o,ov_SC03_028_jr_80159C84.o,tail8.data.o,ov_SC03_028_jr_8015A3C8.o,tail9.data.o,ov_SC03_028_jr_8015AE2C.o,tail10.data.o,ov_SC03_028_jr_8015C32C.o,tail11.data.o,ov_SC03_028_jr_8016AB6C.o,tail12.data.o,ov_SC03_028_jr_801734BC.o,tail13.data.o,ov_SC03_028_jr_80178D40.o,tail14.data.o,ov_SC03_028_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_028_jr_8012ACE0.o,tail2.data.o,ov_SC03_028_jr_801380E0.o,tail3.data.o,ov_SC03_028_jr_8013F350.o,tail4.data.o,ov_SC03_028_jr_8013FFD8.o,tail5.data.o,ov_SC03_028_jr_80140608.o,tail6.data.o,ov_SC03_028_jr_8015444C.o,tail7.data.o,ov_SC03_028_jr_80154C24.o,ov_SC03_028_jr_801588CC.o,tail8.data.o,ov_SC03_028_jr_80159C84.o,tail9.data.o,ov_SC03_028_jr_8015A3C8.o,tail10.data.o,ov_SC03_028_jr_8015AE2C.o,tail11.data.o,ov_SC03_028_jr_8015C32C.o,tail12.data.o,ov_SC03_028_jr_8016AB6C.o,tail13.data.o,ov_SC03_028_jr_801734BC.o,tail14.data.o,ov_SC03_028_jr_80178D40.o,tail15.data.o,ov_SC03_028_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_028/ov_SC03_028_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_028/ov_SC03_028_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_028/ov_SC03_028_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1290,7 +1290,7 @@ ov_SC03_029_ELF := $(ov_SC03_029_OUT).elf ov_SC03_029_MAPFILE := $(ov_SC03_029_OUT).map ov_SC03_029_LD_SCRIPT := $(ov_SC03_029_OUT).ld ov_SC03_029_SPLAT_YAML := config/splat.ov_SC03_029.yaml -ov_SC03_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_029_jr_8012ACE0.o,tail2.data.o,ov_SC03_029_jr_801380E0.o,tail3.data.o,ov_SC03_029_jr_8013F350.o,tail4.data.o,ov_SC03_029_jr_8013FFD8.o,tail5.data.o,ov_SC03_029_jr_8015444C.o,tail6.data.o,ov_SC03_029_jr_80154C24.o,ov_SC03_029_jr_801588CC.o,tail7.data.o,ov_SC03_029_jr_80159C84.o,tail8.data.o,ov_SC03_029_jr_8015A3C8.o,tail9.data.o,ov_SC03_029_jr_8015AE2C.o,tail10.data.o,ov_SC03_029_jr_8015C32C.o,tail11.data.o,ov_SC03_029_jr_8016AB6C.o,tail12.data.o,ov_SC03_029_jr_801734BC.o,tail13.data.o,ov_SC03_029_jr_80178D40.o,tail14.data.o,ov_SC03_029_jr_8017A4AC.o,tail15.data.o,ov_SC03_029_jr_8017DC70.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_029_jr_8012ACE0.o,tail2.data.o,ov_SC03_029_jr_801380E0.o,tail3.data.o,ov_SC03_029_jr_8013F350.o,tail4.data.o,ov_SC03_029_jr_8013FFD8.o,tail5.data.o,ov_SC03_029_jr_80140608.o,tail6.data.o,ov_SC03_029_jr_8015444C.o,tail7.data.o,ov_SC03_029_jr_80154C24.o,ov_SC03_029_jr_801588CC.o,tail8.data.o,ov_SC03_029_jr_80159C84.o,tail9.data.o,ov_SC03_029_jr_8015A3C8.o,tail10.data.o,ov_SC03_029_jr_8015AE2C.o,tail11.data.o,ov_SC03_029_jr_8015C32C.o,tail12.data.o,ov_SC03_029_jr_8016AB6C.o,tail13.data.o,ov_SC03_029_jr_801734BC.o,tail14.data.o,ov_SC03_029_jr_80178D40.o,tail15.data.o,ov_SC03_029_jr_8017A4AC.o,tail16.data.o,ov_SC03_029_jr_8017DC70.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_029/ov_SC03_029_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_029/ov_SC03_029_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_029/ov_SC03_029_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1317,7 +1317,7 @@ ov_SC03_030_ELF := $(ov_SC03_030_OUT).elf ov_SC03_030_MAPFILE := $(ov_SC03_030_OUT).map ov_SC03_030_LD_SCRIPT := $(ov_SC03_030_OUT).ld ov_SC03_030_SPLAT_YAML := config/splat.ov_SC03_030.yaml -ov_SC03_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_030_jr_8012ACE0.o,tail2.data.o,ov_SC03_030_jr_801380E0.o,tail3.data.o,ov_SC03_030_jr_8013F350.o,tail4.data.o,ov_SC03_030_jr_8015444C.o,tail5.data.o,ov_SC03_030_jr_80154C24.o,ov_SC03_030_jr_801588CC.o,tail6.data.o,ov_SC03_030_jr_80159C84.o,tail7.data.o,ov_SC03_030_jr_8015A3C8.o,tail8.data.o,ov_SC03_030_jr_8015AE2C.o,tail9.data.o,ov_SC03_030_jr_8015C32C.o,tail10.data.o,ov_SC03_030_jr_8016AB6C.o,tail11.data.o,ov_SC03_030_jr_801734BC.o,tail12.data.o,ov_SC03_030_jr_80178D40.o,tail13.data.o,ov_SC03_030_jr_8017A4AC.o,tail14.data.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_030_jr_8012ACE0.o,tail2.data.o,ov_SC03_030_jr_801380E0.o,tail3.data.o,ov_SC03_030_jr_8013F350.o,tail4.data.o,ov_SC03_030_jr_80140608.o,tail5.data.o,ov_SC03_030_jr_8015444C.o,tail6.data.o,ov_SC03_030_jr_80154C24.o,ov_SC03_030_jr_801588CC.o,tail7.data.o,ov_SC03_030_jr_80159C84.o,tail8.data.o,ov_SC03_030_jr_8015A3C8.o,tail9.data.o,ov_SC03_030_jr_8015AE2C.o,tail10.data.o,ov_SC03_030_jr_8015C32C.o,tail11.data.o,ov_SC03_030_jr_8016AB6C.o,tail12.data.o,ov_SC03_030_jr_801734BC.o,tail13.data.o,ov_SC03_030_jr_80178D40.o,tail14.data.o,ov_SC03_030_jr_8017A4AC.o,tail15.data.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_030/ov_SC03_030_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_030/ov_SC03_030_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_030/ov_SC03_030_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1344,7 +1344,7 @@ ov_SC03_031_ELF := $(ov_SC03_031_OUT).elf ov_SC03_031_MAPFILE := $(ov_SC03_031_OUT).map ov_SC03_031_LD_SCRIPT := $(ov_SC03_031_OUT).ld ov_SC03_031_SPLAT_YAML := config/splat.ov_SC03_031.yaml -ov_SC03_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_031_jr_8012ACE0.o,tail2.data.o,ov_SC03_031_jr_801380E0.o,tail3.data.o,ov_SC03_031_jr_8013F350.o,tail4.data.o,ov_SC03_031_jr_8013FFD8.o,tail5.data.o,ov_SC03_031_jr_8015444C.o,tail6.data.o,ov_SC03_031_jr_80154C24.o,ov_SC03_031_jr_801588CC.o,tail7.data.o,ov_SC03_031_jr_80159C84.o,tail8.data.o,ov_SC03_031_jr_8015A3C8.o,tail9.data.o,ov_SC03_031_jr_8015AE2C.o,tail10.data.o,ov_SC03_031_jr_8015C32C.o,tail11.data.o,ov_SC03_031_jr_8016AB6C.o,tail12.data.o,ov_SC03_031_jr_801734BC.o,tail13.data.o,ov_SC03_031_jr_80178D40.o,tail14.data.o,ov_SC03_031_jr_8017A4AC.o,tail15.data.o,ov_SC03_031_jr_8017DB5C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_031_jr_8012ACE0.o,tail2.data.o,ov_SC03_031_jr_801380E0.o,tail3.data.o,ov_SC03_031_jr_8013F350.o,tail4.data.o,ov_SC03_031_jr_8013FFD8.o,tail5.data.o,ov_SC03_031_jr_80140608.o,tail6.data.o,ov_SC03_031_jr_8015444C.o,tail7.data.o,ov_SC03_031_jr_80154C24.o,ov_SC03_031_jr_801588CC.o,tail8.data.o,ov_SC03_031_jr_80159C84.o,tail9.data.o,ov_SC03_031_jr_8015A3C8.o,tail10.data.o,ov_SC03_031_jr_8015AE2C.o,tail11.data.o,ov_SC03_031_jr_8015C32C.o,tail12.data.o,ov_SC03_031_jr_8016AB6C.o,tail13.data.o,ov_SC03_031_jr_801734BC.o,tail14.data.o,ov_SC03_031_jr_80178D40.o,tail15.data.o,ov_SC03_031_jr_8017A4AC.o,tail16.data.o,ov_SC03_031_jr_8017DB5C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_031/ov_SC03_031_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_031/ov_SC03_031_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_031/ov_SC03_031_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1371,7 +1371,7 @@ ov_SC03_089_ELF := $(ov_SC03_089_OUT).elf ov_SC03_089_MAPFILE := $(ov_SC03_089_OUT).map ov_SC03_089_LD_SCRIPT := $(ov_SC03_089_OUT).ld ov_SC03_089_SPLAT_YAML := config/splat.ov_SC03_089.yaml -ov_SC03_089_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_089_jr_8012ACE0.o,tail2.data.o,ov_SC03_089_jr_801380E0.o,tail3.data.o,ov_SC03_089_jr_8013F350.o,tail4.data.o,ov_SC03_089_jr_8013FFD8.o,tail5.data.o,ov_SC03_089_jr_8015444C.o,tail6.data.o,ov_SC03_089_jr_80154C24.o,ov_SC03_089_jr_801588CC.o,tail7.data.o,ov_SC03_089_jr_80159C84.o,tail8.data.o,ov_SC03_089_jr_8015A3C8.o,tail9.data.o,ov_SC03_089_jr_8015AE2C.o,tail10.data.o,ov_SC03_089_jr_8015C32C.o,tail11.data.o,ov_SC03_089_jr_8016AB6C.o,tail12.data.o,ov_SC03_089_jr_801734BC.o,tail13.data.o,ov_SC03_089_jr_80178D40.o,tail14.data.o,ov_SC03_089_jr_8017A4AC.o,tail15.data.o,ov_SC03_089_jr_8017CA80.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_089_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_089_jr_8012ACE0.o,tail2.data.o,ov_SC03_089_jr_801380E0.o,tail3.data.o,ov_SC03_089_jr_8013F350.o,tail4.data.o,ov_SC03_089_jr_8013FFD8.o,tail5.data.o,ov_SC03_089_jr_80140608.o,tail6.data.o,ov_SC03_089_jr_8015444C.o,tail7.data.o,ov_SC03_089_jr_80154C24.o,ov_SC03_089_jr_801588CC.o,tail8.data.o,ov_SC03_089_jr_80159C84.o,tail9.data.o,ov_SC03_089_jr_8015A3C8.o,tail10.data.o,ov_SC03_089_jr_8015AE2C.o,tail11.data.o,ov_SC03_089_jr_8015C32C.o,tail12.data.o,ov_SC03_089_jr_8016AB6C.o,tail13.data.o,ov_SC03_089_jr_801734BC.o,tail14.data.o,ov_SC03_089_jr_80178D40.o,tail15.data.o,ov_SC03_089_jr_8017A4AC.o,tail16.data.o,ov_SC03_089_jr_8017CA80.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_089/ov_SC03_089_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_089/ov_SC03_089_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_089/ov_SC03_089_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1398,7 +1398,7 @@ ov_SC03_090_ELF := $(ov_SC03_090_OUT).elf ov_SC03_090_MAPFILE := $(ov_SC03_090_OUT).map ov_SC03_090_LD_SCRIPT := $(ov_SC03_090_OUT).ld ov_SC03_090_SPLAT_YAML := config/splat.ov_SC03_090.yaml -ov_SC03_090_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_090_jr_8012ACE0.o,tail2.data.o,ov_SC03_090_jr_801380E0.o,tail3.data.o,ov_SC03_090_jr_8013F350.o,tail4.data.o,ov_SC03_090_jr_8013FFD8.o,tail5.data.o,ov_SC03_090_jr_8015444C.o,tail6.data.o,ov_SC03_090_jr_80154C24.o,ov_SC03_090_jr_801588CC.o,tail7.data.o,ov_SC03_090_jr_80159C84.o,tail8.data.o,ov_SC03_090_jr_8015A3C8.o,tail9.data.o,ov_SC03_090_jr_8015AE2C.o,tail10.data.o,ov_SC03_090_jr_8015C32C.o,tail11.data.o,ov_SC03_090_jr_8016AB6C.o,tail12.data.o,ov_SC03_090_jr_801734BC.o,tail13.data.o,ov_SC03_090_jr_80178D40.o,tail14.data.o,ov_SC03_090_jr_8017A4AC.o,tail15.data.o,ov_SC03_090_jr_8017CA80.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_090_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_090_jr_8012ACE0.o,tail2.data.o,ov_SC03_090_jr_801380E0.o,tail3.data.o,ov_SC03_090_jr_8013F350.o,tail4.data.o,ov_SC03_090_jr_8013FFD8.o,tail5.data.o,ov_SC03_090_jr_80140608.o,tail6.data.o,ov_SC03_090_jr_8015444C.o,tail7.data.o,ov_SC03_090_jr_80154C24.o,ov_SC03_090_jr_801588CC.o,tail8.data.o,ov_SC03_090_jr_80159C84.o,tail9.data.o,ov_SC03_090_jr_8015A3C8.o,tail10.data.o,ov_SC03_090_jr_8015AE2C.o,tail11.data.o,ov_SC03_090_jr_8015C32C.o,tail12.data.o,ov_SC03_090_jr_8016AB6C.o,tail13.data.o,ov_SC03_090_jr_801734BC.o,tail14.data.o,ov_SC03_090_jr_80178D40.o,tail15.data.o,ov_SC03_090_jr_8017A4AC.o,tail16.data.o,ov_SC03_090_jr_8017CA80.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_090/ov_SC03_090_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_090/ov_SC03_090_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_090/ov_SC03_090_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1425,7 +1425,7 @@ ov_SC03_091_ELF := $(ov_SC03_091_OUT).elf ov_SC03_091_MAPFILE := $(ov_SC03_091_OUT).map ov_SC03_091_LD_SCRIPT := $(ov_SC03_091_OUT).ld ov_SC03_091_SPLAT_YAML := config/splat.ov_SC03_091.yaml -ov_SC03_091_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_091_jr_8012ACE0.o,tail2.data.o,ov_SC03_091_jr_801380E0.o,tail3.data.o,ov_SC03_091_jr_8013F350.o,tail4.data.o,ov_SC03_091_jr_8013FFD8.o,tail5.data.o,ov_SC03_091_jr_8015444C.o,tail6.data.o,ov_SC03_091_jr_80154C24.o,ov_SC03_091_jr_801588CC.o,tail7.data.o,ov_SC03_091_jr_80159C84.o,tail8.data.o,ov_SC03_091_jr_8015A3C8.o,tail9.data.o,ov_SC03_091_jr_8015AE2C.o,tail10.data.o,ov_SC03_091_jr_8015C32C.o,tail11.data.o,ov_SC03_091_jr_8016AB6C.o,tail12.data.o,ov_SC03_091_jr_801734BC.o,tail13.data.o,ov_SC03_091_jr_80178D40.o,tail14.data.o,ov_SC03_091_jr_8017A4AC.o,tail15.data.o,ov_SC03_091_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_091_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_091_jr_8012ACE0.o,tail2.data.o,ov_SC03_091_jr_801380E0.o,tail3.data.o,ov_SC03_091_jr_8013F350.o,tail4.data.o,ov_SC03_091_jr_8013FFD8.o,tail5.data.o,ov_SC03_091_jr_80140608.o,tail6.data.o,ov_SC03_091_jr_8015444C.o,tail7.data.o,ov_SC03_091_jr_80154C24.o,ov_SC03_091_jr_801588CC.o,tail8.data.o,ov_SC03_091_jr_80159C84.o,tail9.data.o,ov_SC03_091_jr_8015A3C8.o,tail10.data.o,ov_SC03_091_jr_8015AE2C.o,tail11.data.o,ov_SC03_091_jr_8015C32C.o,tail12.data.o,ov_SC03_091_jr_8016AB6C.o,tail13.data.o,ov_SC03_091_jr_801734BC.o,tail14.data.o,ov_SC03_091_jr_80178D40.o,tail15.data.o,ov_SC03_091_jr_8017A4AC.o,tail16.data.o,ov_SC03_091_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_091/ov_SC03_091_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_091/ov_SC03_091_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_091/ov_SC03_091_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1452,7 +1452,7 @@ ov_SC03_092_ELF := $(ov_SC03_092_OUT).elf ov_SC03_092_MAPFILE := $(ov_SC03_092_OUT).map ov_SC03_092_LD_SCRIPT := $(ov_SC03_092_OUT).ld ov_SC03_092_SPLAT_YAML := config/splat.ov_SC03_092.yaml -ov_SC03_092_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_092_jr_8012ACE0.o,tail2.data.o,ov_SC03_092_jr_801380E0.o,tail3.data.o,ov_SC03_092_jr_8013F350.o,tail4.data.o,ov_SC03_092_jr_8013FFD8.o,tail5.data.o,ov_SC03_092_jr_8015444C.o,tail6.data.o,ov_SC03_092_jr_80154C24.o,ov_SC03_092_jr_801588CC.o,tail7.data.o,ov_SC03_092_jr_80159C84.o,tail8.data.o,ov_SC03_092_jr_8015A3C8.o,tail9.data.o,ov_SC03_092_jr_8015AE2C.o,tail10.data.o,ov_SC03_092_jr_8015C32C.o,tail11.data.o,ov_SC03_092_jr_8016AB6C.o,tail12.data.o,ov_SC03_092_jr_801734BC.o,tail13.data.o,ov_SC03_092_jr_80178D40.o,tail14.data.o,ov_SC03_092_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_092_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_092_jr_8012ACE0.o,tail2.data.o,ov_SC03_092_jr_801380E0.o,tail3.data.o,ov_SC03_092_jr_8013F350.o,tail4.data.o,ov_SC03_092_jr_8013FFD8.o,tail5.data.o,ov_SC03_092_jr_80140608.o,tail6.data.o,ov_SC03_092_jr_8015444C.o,tail7.data.o,ov_SC03_092_jr_80154C24.o,ov_SC03_092_jr_801588CC.o,tail8.data.o,ov_SC03_092_jr_80159C84.o,tail9.data.o,ov_SC03_092_jr_8015A3C8.o,tail10.data.o,ov_SC03_092_jr_8015AE2C.o,tail11.data.o,ov_SC03_092_jr_8015C32C.o,tail12.data.o,ov_SC03_092_jr_8016AB6C.o,tail13.data.o,ov_SC03_092_jr_801734BC.o,tail14.data.o,ov_SC03_092_jr_80178D40.o,tail15.data.o,ov_SC03_092_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_092/ov_SC03_092_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_092/ov_SC03_092_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_092/ov_SC03_092_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1479,7 +1479,7 @@ ov_SC03_093_ELF := $(ov_SC03_093_OUT).elf ov_SC03_093_MAPFILE := $(ov_SC03_093_OUT).map ov_SC03_093_LD_SCRIPT := $(ov_SC03_093_OUT).ld ov_SC03_093_SPLAT_YAML := config/splat.ov_SC03_093.yaml -ov_SC03_093_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_093_jr_8012ACE0.o,tail2.data.o,ov_SC03_093_jr_801380E0.o,tail3.data.o,ov_SC03_093_jr_8013F350.o,tail4.data.o,ov_SC03_093_jr_8013FFD8.o,tail5.data.o,ov_SC03_093_jr_8015444C.o,tail6.data.o,ov_SC03_093_jr_80154C24.o,ov_SC03_093_jr_801588CC.o,tail7.data.o,ov_SC03_093_jr_80159C84.o,tail8.data.o,ov_SC03_093_jr_8015A3C8.o,tail9.data.o,ov_SC03_093_jr_8015AE2C.o,tail10.data.o,ov_SC03_093_jr_8015C32C.o,tail11.data.o,ov_SC03_093_jr_8016AB6C.o,tail12.data.o,ov_SC03_093_jr_801734BC.o,tail13.data.o,ov_SC03_093_jr_80178D40.o,tail14.data.o,ov_SC03_093_jr_8017A4AC.o,tail15.data.o,ov_SC03_093_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_093_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_093_jr_8012ACE0.o,tail2.data.o,ov_SC03_093_jr_801380E0.o,tail3.data.o,ov_SC03_093_jr_8013F350.o,tail4.data.o,ov_SC03_093_jr_8013FFD8.o,tail5.data.o,ov_SC03_093_jr_80140608.o,tail6.data.o,ov_SC03_093_jr_8015444C.o,tail7.data.o,ov_SC03_093_jr_80154C24.o,ov_SC03_093_jr_801588CC.o,tail8.data.o,ov_SC03_093_jr_80159C84.o,tail9.data.o,ov_SC03_093_jr_8015A3C8.o,tail10.data.o,ov_SC03_093_jr_8015AE2C.o,tail11.data.o,ov_SC03_093_jr_8015C32C.o,tail12.data.o,ov_SC03_093_jr_8016AB6C.o,tail13.data.o,ov_SC03_093_jr_801734BC.o,tail14.data.o,ov_SC03_093_jr_80178D40.o,tail15.data.o,ov_SC03_093_jr_8017A4AC.o,tail16.data.o,ov_SC03_093_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_093/ov_SC03_093_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_093/ov_SC03_093_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_093/ov_SC03_093_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1506,7 +1506,7 @@ ov_SC03_094_ELF := $(ov_SC03_094_OUT).elf ov_SC03_094_MAPFILE := $(ov_SC03_094_OUT).map ov_SC03_094_LD_SCRIPT := $(ov_SC03_094_OUT).ld ov_SC03_094_SPLAT_YAML := config/splat.ov_SC03_094.yaml -ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094_jr_8012ACE0.o,tail2.data.o,ov_SC03_094_jr_801380E0.o,tail3.data.o,ov_SC03_094_jr_8013F350.o,tail4.data.o,ov_SC03_094_jr_8013FFD8.o,tail5.data.o,ov_SC03_094_jr_8015444C.o,tail6.data.o,ov_SC03_094_jr_80154C24.o,ov_SC03_094_jr_801588CC.o,tail7.data.o,ov_SC03_094_jr_80159C84.o,tail8.data.o,ov_SC03_094_jr_8015A3C8.o,tail9.data.o,ov_SC03_094_jr_8015AE2C.o,tail10.data.o,ov_SC03_094_jr_8015C32C.o,tail11.data.o,ov_SC03_094_jr_8016AB6C.o,tail12.data.o,ov_SC03_094_jr_801734BC.o,tail13.data.o,ov_SC03_094_jr_80178D40.o,tail14.data.o,ov_SC03_094_jr_8017A4AC.o,tail15.data.o,ov_SC03_094_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094_jr_8012ACE0.o,tail2.data.o,ov_SC03_094_jr_801380E0.o,tail3.data.o,ov_SC03_094_jr_8013F350.o,tail4.data.o,ov_SC03_094_jr_8013FFD8.o,tail5.data.o,ov_SC03_094_jr_80140608.o,tail6.data.o,ov_SC03_094_jr_8015444C.o,tail7.data.o,ov_SC03_094_jr_80154C24.o,ov_SC03_094_jr_801588CC.o,tail8.data.o,ov_SC03_094_jr_80159C84.o,tail9.data.o,ov_SC03_094_jr_8015A3C8.o,tail10.data.o,ov_SC03_094_jr_8015AE2C.o,tail11.data.o,ov_SC03_094_jr_8015C32C.o,tail12.data.o,ov_SC03_094_jr_8016AB6C.o,tail13.data.o,ov_SC03_094_jr_801734BC.o,tail14.data.o,ov_SC03_094_jr_80178D40.o,tail15.data.o,ov_SC03_094_jr_8017A4AC.o,tail16.data.o,ov_SC03_094_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_094/ov_SC03_094_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_094/ov_SC03_094_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_094/ov_SC03_094_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1533,7 +1533,7 @@ ov_SC03_095_ELF := $(ov_SC03_095_OUT).elf ov_SC03_095_MAPFILE := $(ov_SC03_095_OUT).map ov_SC03_095_LD_SCRIPT := $(ov_SC03_095_OUT).ld ov_SC03_095_SPLAT_YAML := config/splat.ov_SC03_095.yaml -ov_SC03_095_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_095_jr_8012ACE0.o,tail2.data.o,ov_SC03_095_jr_801380E0.o,tail3.data.o,ov_SC03_095_jr_8013F350.o,tail4.data.o,ov_SC03_095_jr_8013FFD8.o,tail5.data.o,ov_SC03_095_jr_8015444C.o,tail6.data.o,ov_SC03_095_jr_80154C24.o,ov_SC03_095_jr_801588CC.o,tail7.data.o,ov_SC03_095_jr_80159C84.o,tail8.data.o,ov_SC03_095_jr_8015A3C8.o,tail9.data.o,ov_SC03_095_jr_8015AE2C.o,tail10.data.o,ov_SC03_095_jr_8015C32C.o,tail11.data.o,ov_SC03_095_jr_8016AB6C.o,tail12.data.o,ov_SC03_095_jr_801734BC.o,tail13.data.o,ov_SC03_095_jr_80178D40.o,tail14.data.o,ov_SC03_095_jr_8017A4AC.o,tail15.data.o,ov_SC03_095_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_095_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_095_jr_8012ACE0.o,tail2.data.o,ov_SC03_095_jr_801380E0.o,tail3.data.o,ov_SC03_095_jr_8013F350.o,tail4.data.o,ov_SC03_095_jr_8013FFD8.o,tail5.data.o,ov_SC03_095_jr_80140608.o,tail6.data.o,ov_SC03_095_jr_8015444C.o,tail7.data.o,ov_SC03_095_jr_80154C24.o,ov_SC03_095_jr_801588CC.o,tail8.data.o,ov_SC03_095_jr_80159C84.o,tail9.data.o,ov_SC03_095_jr_8015A3C8.o,tail10.data.o,ov_SC03_095_jr_8015AE2C.o,tail11.data.o,ov_SC03_095_jr_8015C32C.o,tail12.data.o,ov_SC03_095_jr_8016AB6C.o,tail13.data.o,ov_SC03_095_jr_801734BC.o,tail14.data.o,ov_SC03_095_jr_80178D40.o,tail15.data.o,ov_SC03_095_jr_8017A4AC.o,tail16.data.o,ov_SC03_095_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_095/ov_SC03_095_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_095/ov_SC03_095_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_095/ov_SC03_095_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1560,7 +1560,7 @@ ov_SC03_096_ELF := $(ov_SC03_096_OUT).elf ov_SC03_096_MAPFILE := $(ov_SC03_096_OUT).map ov_SC03_096_LD_SCRIPT := $(ov_SC03_096_OUT).ld ov_SC03_096_SPLAT_YAML := config/splat.ov_SC03_096.yaml -ov_SC03_096_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_096_jr_8012ACE0.o,tail2.data.o,ov_SC03_096_jr_801380E0.o,tail3.data.o,ov_SC03_096_jr_8013F350.o,tail4.data.o,ov_SC03_096_jr_8013FFD8.o,tail5.data.o,ov_SC03_096_jr_8015444C.o,tail6.data.o,ov_SC03_096_jr_80154C24.o,ov_SC03_096_jr_801588CC.o,tail7.data.o,ov_SC03_096_jr_80159C84.o,tail8.data.o,ov_SC03_096_jr_8015A3C8.o,tail9.data.o,ov_SC03_096_jr_8015AE2C.o,tail10.data.o,ov_SC03_096_jr_8015C32C.o,tail11.data.o,ov_SC03_096_jr_8016AB6C.o,tail12.data.o,ov_SC03_096_jr_801734BC.o,tail13.data.o,ov_SC03_096_jr_80178D40.o,tail14.data.o,ov_SC03_096_jr_8017A4AC.o,tail15.data.o,ov_SC03_096_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_096_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_096_jr_8012ACE0.o,tail2.data.o,ov_SC03_096_jr_801380E0.o,tail3.data.o,ov_SC03_096_jr_8013F350.o,tail4.data.o,ov_SC03_096_jr_8013FFD8.o,tail5.data.o,ov_SC03_096_jr_80140608.o,tail6.data.o,ov_SC03_096_jr_8015444C.o,tail7.data.o,ov_SC03_096_jr_80154C24.o,ov_SC03_096_jr_801588CC.o,tail8.data.o,ov_SC03_096_jr_80159C84.o,tail9.data.o,ov_SC03_096_jr_8015A3C8.o,tail10.data.o,ov_SC03_096_jr_8015AE2C.o,tail11.data.o,ov_SC03_096_jr_8015C32C.o,tail12.data.o,ov_SC03_096_jr_8016AB6C.o,tail13.data.o,ov_SC03_096_jr_801734BC.o,tail14.data.o,ov_SC03_096_jr_80178D40.o,tail15.data.o,ov_SC03_096_jr_8017A4AC.o,tail16.data.o,ov_SC03_096_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_096/ov_SC03_096_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_096/ov_SC03_096_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_096/ov_SC03_096_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1587,7 +1587,7 @@ ov_SC03_097_ELF := $(ov_SC03_097_OUT).elf ov_SC03_097_MAPFILE := $(ov_SC03_097_OUT).map ov_SC03_097_LD_SCRIPT := $(ov_SC03_097_OUT).ld ov_SC03_097_SPLAT_YAML := config/splat.ov_SC03_097.yaml -ov_SC03_097_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_097_jr_8012ACE0.o,tail2.data.o,ov_SC03_097_jr_801380E0.o,tail3.data.o,ov_SC03_097_jr_8013F350.o,tail4.data.o,ov_SC03_097_jr_8013FFD8.o,tail5.data.o,ov_SC03_097_jr_8015444C.o,tail6.data.o,ov_SC03_097_jr_80154C24.o,ov_SC03_097_jr_801588CC.o,tail7.data.o,ov_SC03_097_jr_80159C84.o,tail8.data.o,ov_SC03_097_jr_8015A3C8.o,tail9.data.o,ov_SC03_097_jr_8015AE2C.o,tail10.data.o,ov_SC03_097_jr_8015C32C.o,tail11.data.o,ov_SC03_097_jr_8016AB6C.o,tail12.data.o,ov_SC03_097_jr_801734BC.o,tail13.data.o,ov_SC03_097_jr_80178D40.o,tail14.data.o,ov_SC03_097_jr_8017A4AC.o,tail15.data.o,ov_SC03_097_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_097_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_097_jr_8012ACE0.o,tail2.data.o,ov_SC03_097_jr_801380E0.o,tail3.data.o,ov_SC03_097_jr_8013F350.o,tail4.data.o,ov_SC03_097_jr_8013FFD8.o,tail5.data.o,ov_SC03_097_jr_80140608.o,tail6.data.o,ov_SC03_097_jr_8015444C.o,tail7.data.o,ov_SC03_097_jr_80154C24.o,ov_SC03_097_jr_801588CC.o,tail8.data.o,ov_SC03_097_jr_80159C84.o,tail9.data.o,ov_SC03_097_jr_8015A3C8.o,tail10.data.o,ov_SC03_097_jr_8015AE2C.o,tail11.data.o,ov_SC03_097_jr_8015C32C.o,tail12.data.o,ov_SC03_097_jr_8016AB6C.o,tail13.data.o,ov_SC03_097_jr_801734BC.o,tail14.data.o,ov_SC03_097_jr_80178D40.o,tail15.data.o,ov_SC03_097_jr_8017A4AC.o,tail16.data.o,ov_SC03_097_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_097/ov_SC03_097_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_097/ov_SC03_097_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_097/ov_SC03_097_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1614,7 +1614,7 @@ ov_SC03_098_ELF := $(ov_SC03_098_OUT).elf ov_SC03_098_MAPFILE := $(ov_SC03_098_OUT).map ov_SC03_098_LD_SCRIPT := $(ov_SC03_098_OUT).ld ov_SC03_098_SPLAT_YAML := config/splat.ov_SC03_098.yaml -ov_SC03_098_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_098_jr_8012ACE0.o,tail2.data.o,ov_SC03_098_jr_801380E0.o,tail3.data.o,ov_SC03_098_jr_8013F350.o,tail4.data.o,ov_SC03_098_jr_8013FFD8.o,tail5.data.o,ov_SC03_098_jr_8015444C.o,tail6.data.o,ov_SC03_098_jr_80154C24.o,ov_SC03_098_jr_801588CC.o,tail7.data.o,ov_SC03_098_jr_80159C84.o,tail8.data.o,ov_SC03_098_jr_8015A3C8.o,tail9.data.o,ov_SC03_098_jr_8015AE2C.o,tail10.data.o,ov_SC03_098_jr_8015C32C.o,tail11.data.o,ov_SC03_098_jr_8016AB6C.o,tail12.data.o,ov_SC03_098_jr_801734BC.o,tail13.data.o,ov_SC03_098_jr_80178D40.o,tail14.data.o,ov_SC03_098_jr_8017A4AC.o,tail15.data.o,ov_SC03_098_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_098_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_098_jr_8012ACE0.o,tail2.data.o,ov_SC03_098_jr_801380E0.o,tail3.data.o,ov_SC03_098_jr_8013F350.o,tail4.data.o,ov_SC03_098_jr_8013FFD8.o,tail5.data.o,ov_SC03_098_jr_80140608.o,tail6.data.o,ov_SC03_098_jr_8015444C.o,tail7.data.o,ov_SC03_098_jr_80154C24.o,ov_SC03_098_jr_801588CC.o,tail8.data.o,ov_SC03_098_jr_80159C84.o,tail9.data.o,ov_SC03_098_jr_8015A3C8.o,tail10.data.o,ov_SC03_098_jr_8015AE2C.o,tail11.data.o,ov_SC03_098_jr_8015C32C.o,tail12.data.o,ov_SC03_098_jr_8016AB6C.o,tail13.data.o,ov_SC03_098_jr_801734BC.o,tail14.data.o,ov_SC03_098_jr_80178D40.o,tail15.data.o,ov_SC03_098_jr_8017A4AC.o,tail16.data.o,ov_SC03_098_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_098/ov_SC03_098_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_098/ov_SC03_098_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_098/ov_SC03_098_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1641,7 +1641,7 @@ ov_SC03_099_ELF := $(ov_SC03_099_OUT).elf ov_SC03_099_MAPFILE := $(ov_SC03_099_OUT).map ov_SC03_099_LD_SCRIPT := $(ov_SC03_099_OUT).ld ov_SC03_099_SPLAT_YAML := config/splat.ov_SC03_099.yaml -ov_SC03_099_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_099_jr_8012ACE0.o,tail2.data.o,ov_SC03_099_jr_801380E0.o,tail3.data.o,ov_SC03_099_jr_8013F350.o,tail4.data.o,ov_SC03_099_jr_8013FFD8.o,tail5.data.o,ov_SC03_099_jr_8015444C.o,tail6.data.o,ov_SC03_099_jr_80154C24.o,ov_SC03_099_jr_801588CC.o,tail7.data.o,ov_SC03_099_jr_80159C84.o,tail8.data.o,ov_SC03_099_jr_8015A3C8.o,tail9.data.o,ov_SC03_099_jr_8015AE2C.o,tail10.data.o,ov_SC03_099_jr_8015C32C.o,tail11.data.o,ov_SC03_099_jr_8016AB6C.o,tail12.data.o,ov_SC03_099_jr_801734BC.o,tail13.data.o,ov_SC03_099_jr_80178D40.o,tail14.data.o,ov_SC03_099_jr_8017A4AC.o,tail15.data.o,ov_SC03_099_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_099_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_099_jr_8012ACE0.o,tail2.data.o,ov_SC03_099_jr_801380E0.o,tail3.data.o,ov_SC03_099_jr_8013F350.o,tail4.data.o,ov_SC03_099_jr_8013FFD8.o,tail5.data.o,ov_SC03_099_jr_80140608.o,tail6.data.o,ov_SC03_099_jr_8015444C.o,tail7.data.o,ov_SC03_099_jr_80154C24.o,ov_SC03_099_jr_801588CC.o,tail8.data.o,ov_SC03_099_jr_80159C84.o,tail9.data.o,ov_SC03_099_jr_8015A3C8.o,tail10.data.o,ov_SC03_099_jr_8015AE2C.o,tail11.data.o,ov_SC03_099_jr_8015C32C.o,tail12.data.o,ov_SC03_099_jr_8016AB6C.o,tail13.data.o,ov_SC03_099_jr_801734BC.o,tail14.data.o,ov_SC03_099_jr_80178D40.o,tail15.data.o,ov_SC03_099_jr_8017A4AC.o,tail16.data.o,ov_SC03_099_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_099/ov_SC03_099_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_099/ov_SC03_099_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_099/ov_SC03_099_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1668,7 +1668,7 @@ ov_SC03_100_ELF := $(ov_SC03_100_OUT).elf ov_SC03_100_MAPFILE := $(ov_SC03_100_OUT).map ov_SC03_100_LD_SCRIPT := $(ov_SC03_100_OUT).ld ov_SC03_100_SPLAT_YAML := config/splat.ov_SC03_100.yaml -ov_SC03_100_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_100_jr_8012ACE0.o,tail2.data.o,ov_SC03_100_jr_801380E0.o,tail3.data.o,ov_SC03_100_jr_8013F350.o,tail4.data.o,ov_SC03_100_jr_8013FFD8.o,tail5.data.o,ov_SC03_100_jr_8015444C.o,tail6.data.o,ov_SC03_100_jr_80154C24.o,ov_SC03_100_jr_801588CC.o,tail7.data.o,ov_SC03_100_jr_80159C84.o,tail8.data.o,ov_SC03_100_jr_8015A3C8.o,tail9.data.o,ov_SC03_100_jr_8015AE2C.o,tail10.data.o,ov_SC03_100_jr_8015C32C.o,tail11.data.o,ov_SC03_100_jr_8016AB6C.o,tail12.data.o,ov_SC03_100_jr_801734BC.o,tail13.data.o,ov_SC03_100_jr_80178D40.o,tail14.data.o,ov_SC03_100_jr_8017A4AC.o,tail15.data.o,ov_SC03_100_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_100_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_100_jr_8012ACE0.o,tail2.data.o,ov_SC03_100_jr_801380E0.o,tail3.data.o,ov_SC03_100_jr_8013F350.o,tail4.data.o,ov_SC03_100_jr_8013FFD8.o,tail5.data.o,ov_SC03_100_jr_80140608.o,tail6.data.o,ov_SC03_100_jr_8015444C.o,tail7.data.o,ov_SC03_100_jr_80154C24.o,ov_SC03_100_jr_801588CC.o,tail8.data.o,ov_SC03_100_jr_80159C84.o,tail9.data.o,ov_SC03_100_jr_8015A3C8.o,tail10.data.o,ov_SC03_100_jr_8015AE2C.o,tail11.data.o,ov_SC03_100_jr_8015C32C.o,tail12.data.o,ov_SC03_100_jr_8016AB6C.o,tail13.data.o,ov_SC03_100_jr_801734BC.o,tail14.data.o,ov_SC03_100_jr_80178D40.o,tail15.data.o,ov_SC03_100_jr_8017A4AC.o,tail16.data.o,ov_SC03_100_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_100/ov_SC03_100_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_100/ov_SC03_100_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_100/ov_SC03_100_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1695,7 +1695,7 @@ ov_SC03_101_ELF := $(ov_SC03_101_OUT).elf ov_SC03_101_MAPFILE := $(ov_SC03_101_OUT).map ov_SC03_101_LD_SCRIPT := $(ov_SC03_101_OUT).ld ov_SC03_101_SPLAT_YAML := config/splat.ov_SC03_101.yaml -ov_SC03_101_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_101_jr_8012ACE0.o,tail2.data.o,ov_SC03_101_jr_801380E0.o,tail3.data.o,ov_SC03_101_jr_8013F350.o,tail4.data.o,ov_SC03_101_jr_8013FFD8.o,tail5.data.o,ov_SC03_101_jr_8015444C.o,tail6.data.o,ov_SC03_101_jr_80154C24.o,ov_SC03_101_jr_801588CC.o,tail7.data.o,ov_SC03_101_jr_80159C84.o,tail8.data.o,ov_SC03_101_jr_8015A3C8.o,tail9.data.o,ov_SC03_101_jr_8015AE2C.o,tail10.data.o,ov_SC03_101_jr_8015C32C.o,tail11.data.o,ov_SC03_101_jr_8016AB6C.o,tail12.data.o,ov_SC03_101_jr_801734BC.o,tail13.data.o,ov_SC03_101_jr_80178D40.o,tail14.data.o,ov_SC03_101_jr_8017A4AC.o,tail15.data.o,ov_SC03_101_jr_8017CA80.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_101_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_101_jr_8012ACE0.o,tail2.data.o,ov_SC03_101_jr_801380E0.o,tail3.data.o,ov_SC03_101_jr_8013F350.o,tail4.data.o,ov_SC03_101_jr_8013FFD8.o,tail5.data.o,ov_SC03_101_jr_80140608.o,tail6.data.o,ov_SC03_101_jr_8015444C.o,tail7.data.o,ov_SC03_101_jr_80154C24.o,ov_SC03_101_jr_801588CC.o,tail8.data.o,ov_SC03_101_jr_80159C84.o,tail9.data.o,ov_SC03_101_jr_8015A3C8.o,tail10.data.o,ov_SC03_101_jr_8015AE2C.o,tail11.data.o,ov_SC03_101_jr_8015C32C.o,tail12.data.o,ov_SC03_101_jr_8016AB6C.o,tail13.data.o,ov_SC03_101_jr_801734BC.o,tail14.data.o,ov_SC03_101_jr_80178D40.o,tail15.data.o,ov_SC03_101_jr_8017A4AC.o,tail16.data.o,ov_SC03_101_jr_8017CA80.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_101/ov_SC03_101_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_101/ov_SC03_101_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_101/ov_SC03_101_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1722,7 +1722,7 @@ ov_SC03_102_ELF := $(ov_SC03_102_OUT).elf ov_SC03_102_MAPFILE := $(ov_SC03_102_OUT).map ov_SC03_102_LD_SCRIPT := $(ov_SC03_102_OUT).ld ov_SC03_102_SPLAT_YAML := config/splat.ov_SC03_102.yaml -ov_SC03_102_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_102_jr_8012ACE0.o,tail2.data.o,ov_SC03_102_jr_801380E0.o,tail3.data.o,ov_SC03_102_jr_8013F350.o,tail4.data.o,ov_SC03_102_jr_8013FFD8.o,tail5.data.o,ov_SC03_102_jr_8015444C.o,tail6.data.o,ov_SC03_102_jr_80154C24.o,ov_SC03_102_jr_801588CC.o,tail7.data.o,ov_SC03_102_jr_80159C84.o,tail8.data.o,ov_SC03_102_jr_8015A3C8.o,tail9.data.o,ov_SC03_102_jr_8015AE2C.o,tail10.data.o,ov_SC03_102_jr_8015C32C.o,tail11.data.o,ov_SC03_102_jr_8016AB6C.o,tail12.data.o,ov_SC03_102_jr_801734BC.o,tail13.data.o,ov_SC03_102_jr_80178D40.o,tail14.data.o,ov_SC03_102_jr_8017A4AC.o,tail15.data.o,ov_SC03_102_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_102_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_102_jr_8012ACE0.o,tail2.data.o,ov_SC03_102_jr_801380E0.o,tail3.data.o,ov_SC03_102_jr_8013F350.o,tail4.data.o,ov_SC03_102_jr_8013FFD8.o,tail5.data.o,ov_SC03_102_jr_80140608.o,tail6.data.o,ov_SC03_102_jr_8015444C.o,tail7.data.o,ov_SC03_102_jr_80154C24.o,ov_SC03_102_jr_801588CC.o,tail8.data.o,ov_SC03_102_jr_80159C84.o,tail9.data.o,ov_SC03_102_jr_8015A3C8.o,tail10.data.o,ov_SC03_102_jr_8015AE2C.o,tail11.data.o,ov_SC03_102_jr_8015C32C.o,tail12.data.o,ov_SC03_102_jr_8016AB6C.o,tail13.data.o,ov_SC03_102_jr_801734BC.o,tail14.data.o,ov_SC03_102_jr_80178D40.o,tail15.data.o,ov_SC03_102_jr_8017A4AC.o,tail16.data.o,ov_SC03_102_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_102/ov_SC03_102_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_102/ov_SC03_102_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_102/ov_SC03_102_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1749,7 +1749,7 @@ ov_SC03_103_ELF := $(ov_SC03_103_OUT).elf ov_SC03_103_MAPFILE := $(ov_SC03_103_OUT).map ov_SC03_103_LD_SCRIPT := $(ov_SC03_103_OUT).ld ov_SC03_103_SPLAT_YAML := config/splat.ov_SC03_103.yaml -ov_SC03_103_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_103_jr_8012ACE0.o,tail2.data.o,ov_SC03_103_jr_801380E0.o,tail3.data.o,ov_SC03_103_jr_8013F350.o,tail4.data.o,ov_SC03_103_jr_8015444C.o,tail5.data.o,ov_SC03_103_jr_80154C24.o,ov_SC03_103_jr_801588CC.o,tail6.data.o,ov_SC03_103_jr_80159C84.o,tail7.data.o,ov_SC03_103_jr_8015A3C8.o,tail8.data.o,ov_SC03_103_jr_8015AE2C.o,tail9.data.o,ov_SC03_103_jr_8015C32C.o,tail10.data.o,ov_SC03_103_jr_8016AB6C.o,tail11.data.o,ov_SC03_103_jr_801734BC.o,tail12.data.o,ov_SC03_103_jr_80178D40.o,tail13.data.o,ov_SC03_103_jr_8017A4AC.o,tail14.data.o,ov_SC03_103_jr_8017C294.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_103_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_103_jr_8012ACE0.o,tail2.data.o,ov_SC03_103_jr_801380E0.o,tail3.data.o,ov_SC03_103_jr_8013F350.o,tail4.data.o,ov_SC03_103_jr_80140608.o,tail5.data.o,ov_SC03_103_jr_8015444C.o,tail6.data.o,ov_SC03_103_jr_80154C24.o,ov_SC03_103_jr_801588CC.o,tail7.data.o,ov_SC03_103_jr_80159C84.o,tail8.data.o,ov_SC03_103_jr_8015A3C8.o,tail9.data.o,ov_SC03_103_jr_8015AE2C.o,tail10.data.o,ov_SC03_103_jr_8015C32C.o,tail11.data.o,ov_SC03_103_jr_8016AB6C.o,tail12.data.o,ov_SC03_103_jr_801734BC.o,tail13.data.o,ov_SC03_103_jr_80178D40.o,tail14.data.o,ov_SC03_103_jr_8017A4AC.o,tail15.data.o,ov_SC03_103_jr_8017C294.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_103/ov_SC03_103_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_103/ov_SC03_103_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_103/ov_SC03_103_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1776,7 +1776,7 @@ ov_SC03_104_ELF := $(ov_SC03_104_OUT).elf ov_SC03_104_MAPFILE := $(ov_SC03_104_OUT).map ov_SC03_104_LD_SCRIPT := $(ov_SC03_104_OUT).ld ov_SC03_104_SPLAT_YAML := config/splat.ov_SC03_104.yaml -ov_SC03_104_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_104_jr_8012ACE0.o,tail2.data.o,ov_SC03_104_jr_801380E0.o,tail3.data.o,ov_SC03_104_jr_8013F350.o,tail4.data.o,ov_SC03_104_jr_8013FFD8.o,tail5.data.o,ov_SC03_104_jr_8015444C.o,tail6.data.o,ov_SC03_104_jr_80154C24.o,ov_SC03_104_jr_801588CC.o,tail7.data.o,ov_SC03_104_jr_80159C84.o,tail8.data.o,ov_SC03_104_jr_8015A3C8.o,tail9.data.o,ov_SC03_104_jr_8015AE2C.o,tail10.data.o,ov_SC03_104_jr_8015C32C.o,tail11.data.o,ov_SC03_104_jr_8016AB6C.o,tail12.data.o,ov_SC03_104_jr_801734BC.o,tail13.data.o,ov_SC03_104_jr_80178D40.o,tail14.data.o,ov_SC03_104_jr_8017A4AC.o,tail15.data.o,ov_SC03_104_jr_8017CA80.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_104_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_104_jr_8012ACE0.o,tail2.data.o,ov_SC03_104_jr_801380E0.o,tail3.data.o,ov_SC03_104_jr_8013F350.o,tail4.data.o,ov_SC03_104_jr_8013FFD8.o,tail5.data.o,ov_SC03_104_jr_80140608.o,tail6.data.o,ov_SC03_104_jr_8015444C.o,tail7.data.o,ov_SC03_104_jr_80154C24.o,ov_SC03_104_jr_801588CC.o,tail8.data.o,ov_SC03_104_jr_80159C84.o,tail9.data.o,ov_SC03_104_jr_8015A3C8.o,tail10.data.o,ov_SC03_104_jr_8015AE2C.o,tail11.data.o,ov_SC03_104_jr_8015C32C.o,tail12.data.o,ov_SC03_104_jr_8016AB6C.o,tail13.data.o,ov_SC03_104_jr_801734BC.o,tail14.data.o,ov_SC03_104_jr_80178D40.o,tail15.data.o,ov_SC03_104_jr_8017A4AC.o,tail16.data.o,ov_SC03_104_jr_8017CA80.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_104/ov_SC03_104_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_104/ov_SC03_104_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_104/ov_SC03_104_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1803,7 +1803,7 @@ ov_SC03_105_ELF := $(ov_SC03_105_OUT).elf ov_SC03_105_MAPFILE := $(ov_SC03_105_OUT).map ov_SC03_105_LD_SCRIPT := $(ov_SC03_105_OUT).ld ov_SC03_105_SPLAT_YAML := config/splat.ov_SC03_105.yaml -ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105_jr_8012ACE0.o,tail2.data.o,ov_SC03_105_jr_801380E0.o,tail3.data.o,ov_SC03_105_jr_8013F350.o,tail4.data.o,ov_SC03_105_jr_8013FFD8.o,tail5.data.o,ov_SC03_105_jr_8015444C.o,tail6.data.o,ov_SC03_105_jr_80154C24.o,ov_SC03_105_jr_801588CC.o,tail7.data.o,ov_SC03_105_jr_80159C84.o,tail8.data.o,ov_SC03_105_jr_8015A3C8.o,tail9.data.o,ov_SC03_105_jr_8015AE2C.o,tail10.data.o,ov_SC03_105_jr_8015C32C.o,tail11.data.o,ov_SC03_105_jr_8016AB6C.o,tail12.data.o,ov_SC03_105_jr_801734BC.o,tail13.data.o,ov_SC03_105_jr_80178D40.o,tail14.data.o,ov_SC03_105_jr_8017A4AC.o,tail15.data.o,ov_SC03_105_jr_8017C8D0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105_jr_8012ACE0.o,tail2.data.o,ov_SC03_105_jr_801380E0.o,tail3.data.o,ov_SC03_105_jr_8013F350.o,tail4.data.o,ov_SC03_105_jr_8013FFD8.o,tail5.data.o,ov_SC03_105_jr_80140608.o,tail6.data.o,ov_SC03_105_jr_8015444C.o,tail7.data.o,ov_SC03_105_jr_80154C24.o,ov_SC03_105_jr_801588CC.o,tail8.data.o,ov_SC03_105_jr_80159C84.o,tail9.data.o,ov_SC03_105_jr_8015A3C8.o,tail10.data.o,ov_SC03_105_jr_8015AE2C.o,tail11.data.o,ov_SC03_105_jr_8015C32C.o,tail12.data.o,ov_SC03_105_jr_8016AB6C.o,tail13.data.o,ov_SC03_105_jr_801734BC.o,tail14.data.o,ov_SC03_105_jr_80178D40.o,tail15.data.o,ov_SC03_105_jr_8017A4AC.o,tail16.data.o,ov_SC03_105_jr_8017C8D0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_105/ov_SC03_105_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_105/ov_SC03_105_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_105/ov_SC03_105_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1830,7 +1830,7 @@ ov_SC03_108_ELF := $(ov_SC03_108_OUT).elf ov_SC03_108_MAPFILE := $(ov_SC03_108_OUT).map ov_SC03_108_LD_SCRIPT := $(ov_SC03_108_OUT).ld ov_SC03_108_SPLAT_YAML := config/splat.ov_SC03_108.yaml -ov_SC03_108_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_108_jr_8012ACE0.o,tail2.data.o,ov_SC03_108_jr_801380E0.o,tail3.data.o,ov_SC03_108_jr_8013F350.o,tail4.data.o,ov_SC03_108_jr_8013FFD8.o,tail5.data.o,ov_SC03_108_jr_8015444C.o,tail6.data.o,ov_SC03_108_jr_80154C24.o,ov_SC03_108_jr_801588CC.o,tail7.data.o,ov_SC03_108_jr_80159C84.o,tail8.data.o,ov_SC03_108_jr_8015A3C8.o,tail9.data.o,ov_SC03_108_jr_8015AE2C.o,tail10.data.o,ov_SC03_108_jr_8015C32C.o,tail11.data.o,ov_SC03_108_jr_8016AB6C.o,tail12.data.o,ov_SC03_108_jr_801734BC.o,tail13.data.o,ov_SC03_108_jr_80178D40.o,tail14.data.o,ov_SC03_108_jr_8017A4AC.o,tail15.data.o,ov_SC03_108_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_108_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_108_jr_8012ACE0.o,tail2.data.o,ov_SC03_108_jr_801380E0.o,tail3.data.o,ov_SC03_108_jr_8013F350.o,tail4.data.o,ov_SC03_108_jr_8013FFD8.o,tail5.data.o,ov_SC03_108_jr_80140608.o,tail6.data.o,ov_SC03_108_jr_8015444C.o,tail7.data.o,ov_SC03_108_jr_80154C24.o,ov_SC03_108_jr_801588CC.o,tail8.data.o,ov_SC03_108_jr_80159C84.o,tail9.data.o,ov_SC03_108_jr_8015A3C8.o,tail10.data.o,ov_SC03_108_jr_8015AE2C.o,tail11.data.o,ov_SC03_108_jr_8015C32C.o,tail12.data.o,ov_SC03_108_jr_8016AB6C.o,tail13.data.o,ov_SC03_108_jr_801734BC.o,tail14.data.o,ov_SC03_108_jr_80178D40.o,tail15.data.o,ov_SC03_108_jr_8017A4AC.o,tail16.data.o,ov_SC03_108_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_108/ov_SC03_108_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_108/ov_SC03_108_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_108/ov_SC03_108_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1857,7 +1857,7 @@ ov_SC03_109_ELF := $(ov_SC03_109_OUT).elf ov_SC03_109_MAPFILE := $(ov_SC03_109_OUT).map ov_SC03_109_LD_SCRIPT := $(ov_SC03_109_OUT).ld ov_SC03_109_SPLAT_YAML := config/splat.ov_SC03_109.yaml -ov_SC03_109_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_109_jr_8012ACE0.o,tail2.data.o,ov_SC03_109_jr_801380E0.o,tail3.data.o,ov_SC03_109_jr_8013F350.o,tail4.data.o,ov_SC03_109_jr_8013FFD8.o,tail5.data.o,ov_SC03_109_jr_8015444C.o,tail6.data.o,ov_SC03_109_jr_80154C24.o,ov_SC03_109_jr_801588CC.o,tail7.data.o,ov_SC03_109_jr_80159C84.o,tail8.data.o,ov_SC03_109_jr_8015A3C8.o,tail9.data.o,ov_SC03_109_jr_8015AE2C.o,tail10.data.o,ov_SC03_109_jr_8015C32C.o,tail11.data.o,ov_SC03_109_jr_8016AB6C.o,tail12.data.o,ov_SC03_109_jr_801734BC.o,tail13.data.o,ov_SC03_109_jr_80178D40.o,tail14.data.o,ov_SC03_109_jr_8017A4AC.o,tail15.data.o,ov_SC03_109_jr_8017C180.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_109_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_109_jr_8012ACE0.o,tail2.data.o,ov_SC03_109_jr_801380E0.o,tail3.data.o,ov_SC03_109_jr_8013F350.o,tail4.data.o,ov_SC03_109_jr_8013FFD8.o,tail5.data.o,ov_SC03_109_jr_80140608.o,tail6.data.o,ov_SC03_109_jr_8015444C.o,tail7.data.o,ov_SC03_109_jr_80154C24.o,ov_SC03_109_jr_801588CC.o,tail8.data.o,ov_SC03_109_jr_80159C84.o,tail9.data.o,ov_SC03_109_jr_8015A3C8.o,tail10.data.o,ov_SC03_109_jr_8015AE2C.o,tail11.data.o,ov_SC03_109_jr_8015C32C.o,tail12.data.o,ov_SC03_109_jr_8016AB6C.o,tail13.data.o,ov_SC03_109_jr_801734BC.o,tail14.data.o,ov_SC03_109_jr_80178D40.o,tail15.data.o,ov_SC03_109_jr_8017A4AC.o,tail16.data.o,ov_SC03_109_jr_8017C180.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_109/ov_SC03_109_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_109/ov_SC03_109_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_109/ov_SC03_109_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1884,7 +1884,7 @@ ov_SC03_110_ELF := $(ov_SC03_110_OUT).elf ov_SC03_110_MAPFILE := $(ov_SC03_110_OUT).map ov_SC03_110_LD_SCRIPT := $(ov_SC03_110_OUT).ld ov_SC03_110_SPLAT_YAML := config/splat.ov_SC03_110.yaml -ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110_jr_8012ACE0.o,tail2.data.o,ov_SC03_110_jr_801380E0.o,tail3.data.o,ov_SC03_110_jr_8013F350.o,tail4.data.o,ov_SC03_110_jr_8013FFD8.o,tail5.data.o,ov_SC03_110_jr_8015444C.o,tail6.data.o,ov_SC03_110_jr_80154C24.o,ov_SC03_110_jr_801588CC.o,tail7.data.o,ov_SC03_110_jr_80159C84.o,tail8.data.o,ov_SC03_110_jr_8015A3C8.o,tail9.data.o,ov_SC03_110_jr_8015AE2C.o,tail10.data.o,ov_SC03_110_jr_8015C32C.o,tail11.data.o,ov_SC03_110_jr_8016AB6C.o,tail12.data.o,ov_SC03_110_jr_801734BC.o,tail13.data.o,ov_SC03_110_jr_80178D40.o,tail14.data.o,ov_SC03_110_jr_8017A4AC.o,tail15.data.o,ov_SC03_110_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110_jr_8012ACE0.o,tail2.data.o,ov_SC03_110_jr_801380E0.o,tail3.data.o,ov_SC03_110_jr_8013F350.o,tail4.data.o,ov_SC03_110_jr_8013FFD8.o,tail5.data.o,ov_SC03_110_jr_80140608.o,tail6.data.o,ov_SC03_110_jr_8015444C.o,tail7.data.o,ov_SC03_110_jr_80154C24.o,ov_SC03_110_jr_801588CC.o,tail8.data.o,ov_SC03_110_jr_80159C84.o,tail9.data.o,ov_SC03_110_jr_8015A3C8.o,tail10.data.o,ov_SC03_110_jr_8015AE2C.o,tail11.data.o,ov_SC03_110_jr_8015C32C.o,tail12.data.o,ov_SC03_110_jr_8016AB6C.o,tail13.data.o,ov_SC03_110_jr_801734BC.o,tail14.data.o,ov_SC03_110_jr_80178D40.o,tail15.data.o,ov_SC03_110_jr_8017A4AC.o,tail16.data.o,ov_SC03_110_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_110/ov_SC03_110_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_110/ov_SC03_110_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_110/ov_SC03_110_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1911,7 +1911,7 @@ ov_SC03_111_ELF := $(ov_SC03_111_OUT).elf ov_SC03_111_MAPFILE := $(ov_SC03_111_OUT).map ov_SC03_111_LD_SCRIPT := $(ov_SC03_111_OUT).ld ov_SC03_111_SPLAT_YAML := config/splat.ov_SC03_111.yaml -ov_SC03_111_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_111_jr_8012ACE0.o,tail2.data.o,ov_SC03_111_jr_801380E0.o,tail3.data.o,ov_SC03_111_jr_8013F350.o,tail4.data.o,ov_SC03_111_jr_8013FFD8.o,tail5.data.o,ov_SC03_111_jr_8015444C.o,tail6.data.o,ov_SC03_111_jr_80154C24.o,ov_SC03_111_jr_801588CC.o,tail7.data.o,ov_SC03_111_jr_80159C84.o,tail8.data.o,ov_SC03_111_jr_8015A3C8.o,tail9.data.o,ov_SC03_111_jr_8015AE2C.o,tail10.data.o,ov_SC03_111_jr_8015C32C.o,tail11.data.o,ov_SC03_111_jr_8016AB6C.o,tail12.data.o,ov_SC03_111_jr_801734BC.o,tail13.data.o,ov_SC03_111_jr_80178D40.o,tail14.data.o,ov_SC03_111_jr_8017A4AC.o,tail15.data.o,ov_SC03_111_jr_8017EC58.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_111_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_111_jr_8012ACE0.o,tail2.data.o,ov_SC03_111_jr_801380E0.o,tail3.data.o,ov_SC03_111_jr_8013F350.o,tail4.data.o,ov_SC03_111_jr_8013FFD8.o,tail5.data.o,ov_SC03_111_jr_80140608.o,tail6.data.o,ov_SC03_111_jr_8015444C.o,tail7.data.o,ov_SC03_111_jr_80154C24.o,ov_SC03_111_jr_801588CC.o,tail8.data.o,ov_SC03_111_jr_80159C84.o,tail9.data.o,ov_SC03_111_jr_8015A3C8.o,tail10.data.o,ov_SC03_111_jr_8015AE2C.o,tail11.data.o,ov_SC03_111_jr_8015C32C.o,tail12.data.o,ov_SC03_111_jr_8016AB6C.o,tail13.data.o,ov_SC03_111_jr_801734BC.o,tail14.data.o,ov_SC03_111_jr_80178D40.o,tail15.data.o,ov_SC03_111_jr_8017A4AC.o,tail16.data.o,ov_SC03_111_jr_8017EC58.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_111/ov_SC03_111_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_111/ov_SC03_111_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_111/ov_SC03_111_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1938,7 +1938,7 @@ ov_SC03_112_ELF := $(ov_SC03_112_OUT).elf ov_SC03_112_MAPFILE := $(ov_SC03_112_OUT).map ov_SC03_112_LD_SCRIPT := $(ov_SC03_112_OUT).ld ov_SC03_112_SPLAT_YAML := config/splat.ov_SC03_112.yaml -ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112_jr_8012ACE0.o,tail2.data.o,ov_SC03_112_jr_801380E0.o,tail3.data.o,ov_SC03_112_jr_8013F350.o,tail4.data.o,ov_SC03_112_jr_8013FFD8.o,tail5.data.o,ov_SC03_112_jr_8015444C.o,tail6.data.o,ov_SC03_112_jr_80154C24.o,ov_SC03_112_jr_801588CC.o,tail7.data.o,ov_SC03_112_jr_80159C84.o,tail8.data.o,ov_SC03_112_jr_8015A3C8.o,tail9.data.o,ov_SC03_112_jr_8015AE2C.o,tail10.data.o,ov_SC03_112_jr_8015C32C.o,tail11.data.o,ov_SC03_112_jr_8016AB6C.o,tail12.data.o,ov_SC03_112_jr_801734BC.o,tail13.data.o,ov_SC03_112_jr_80178D40.o,tail14.data.o,ov_SC03_112_jr_8017A4AC.o,tail15.data.o,ov_SC03_112_jr_8017C294.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112_jr_8012ACE0.o,tail2.data.o,ov_SC03_112_jr_801380E0.o,tail3.data.o,ov_SC03_112_jr_8013F350.o,tail4.data.o,ov_SC03_112_jr_8013FFD8.o,tail5.data.o,ov_SC03_112_jr_80140608.o,tail6.data.o,ov_SC03_112_jr_8015444C.o,tail7.data.o,ov_SC03_112_jr_80154C24.o,ov_SC03_112_jr_801588CC.o,tail8.data.o,ov_SC03_112_jr_80159C84.o,tail9.data.o,ov_SC03_112_jr_8015A3C8.o,tail10.data.o,ov_SC03_112_jr_8015AE2C.o,tail11.data.o,ov_SC03_112_jr_8015C32C.o,tail12.data.o,ov_SC03_112_jr_8016AB6C.o,tail13.data.o,ov_SC03_112_jr_801734BC.o,tail14.data.o,ov_SC03_112_jr_80178D40.o,tail15.data.o,ov_SC03_112_jr_8017A4AC.o,tail16.data.o,ov_SC03_112_jr_8017C294.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_112/ov_SC03_112_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_112/ov_SC03_112_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_112/ov_SC03_112_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1965,7 +1965,7 @@ ov_SC03_113_ELF := $(ov_SC03_113_OUT).elf ov_SC03_113_MAPFILE := $(ov_SC03_113_OUT).map ov_SC03_113_LD_SCRIPT := $(ov_SC03_113_OUT).ld ov_SC03_113_SPLAT_YAML := config/splat.ov_SC03_113.yaml -ov_SC03_113_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_113_jr_8012ACE0.o,tail2.data.o,ov_SC03_113_jr_801380E0.o,tail3.data.o,ov_SC03_113_jr_8013F350.o,tail4.data.o,ov_SC03_113_jr_8013FFD8.o,tail5.data.o,ov_SC03_113_jr_8015444C.o,tail6.data.o,ov_SC03_113_jr_80154C24.o,ov_SC03_113_jr_801588CC.o,tail7.data.o,ov_SC03_113_jr_80159C84.o,tail8.data.o,ov_SC03_113_jr_8015A3C8.o,tail9.data.o,ov_SC03_113_jr_8015AE2C.o,tail10.data.o,ov_SC03_113_jr_8015C32C.o,tail11.data.o,ov_SC03_113_jr_8016AB6C.o,tail12.data.o,ov_SC03_113_jr_801734BC.o,tail13.data.o,ov_SC03_113_jr_80178D40.o,tail14.data.o,ov_SC03_113_jr_8017A4AC.o,tail15.data.o,ov_SC03_113_jr_8017C294.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_113_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_113_jr_8012ACE0.o,tail2.data.o,ov_SC03_113_jr_801380E0.o,tail3.data.o,ov_SC03_113_jr_8013F350.o,tail4.data.o,ov_SC03_113_jr_8013FFD8.o,tail5.data.o,ov_SC03_113_jr_80140608.o,tail6.data.o,ov_SC03_113_jr_8015444C.o,tail7.data.o,ov_SC03_113_jr_80154C24.o,ov_SC03_113_jr_801588CC.o,tail8.data.o,ov_SC03_113_jr_80159C84.o,tail9.data.o,ov_SC03_113_jr_8015A3C8.o,tail10.data.o,ov_SC03_113_jr_8015AE2C.o,tail11.data.o,ov_SC03_113_jr_8015C32C.o,tail12.data.o,ov_SC03_113_jr_8016AB6C.o,tail13.data.o,ov_SC03_113_jr_801734BC.o,tail14.data.o,ov_SC03_113_jr_80178D40.o,tail15.data.o,ov_SC03_113_jr_8017A4AC.o,tail16.data.o,ov_SC03_113_jr_8017C294.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_113/ov_SC03_113_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_113/ov_SC03_113_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_113/ov_SC03_113_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -1992,7 +1992,7 @@ ov_SC03_114_ELF := $(ov_SC03_114_OUT).elf ov_SC03_114_MAPFILE := $(ov_SC03_114_OUT).map ov_SC03_114_LD_SCRIPT := $(ov_SC03_114_OUT).ld ov_SC03_114_SPLAT_YAML := config/splat.ov_SC03_114.yaml -ov_SC03_114_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_114_jr_8012ACE0.o,tail2.data.o,ov_SC03_114_jr_801380E0.o,tail3.data.o,ov_SC03_114_jr_8013F350.o,tail4.data.o,ov_SC03_114_jr_8013FFD8.o,tail5.data.o,ov_SC03_114_jr_8015444C.o,tail6.data.o,ov_SC03_114_jr_80154C24.o,ov_SC03_114_jr_801588CC.o,tail7.data.o,ov_SC03_114_jr_80159C84.o,tail8.data.o,ov_SC03_114_jr_8015A3C8.o,tail9.data.o,ov_SC03_114_jr_8015AE2C.o,tail10.data.o,ov_SC03_114_jr_8015C32C.o,tail11.data.o,ov_SC03_114_jr_8016AB6C.o,tail12.data.o,ov_SC03_114_jr_801734BC.o,tail13.data.o,ov_SC03_114_jr_80178D40.o,tail14.data.o,ov_SC03_114_jr_8017A4AC.o,tail15.data.o,ov_SC03_114_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_114_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_114_jr_8012ACE0.o,tail2.data.o,ov_SC03_114_jr_801380E0.o,tail3.data.o,ov_SC03_114_jr_8013F350.o,tail4.data.o,ov_SC03_114_jr_8013FFD8.o,tail5.data.o,ov_SC03_114_jr_80140608.o,tail6.data.o,ov_SC03_114_jr_8015444C.o,tail7.data.o,ov_SC03_114_jr_80154C24.o,ov_SC03_114_jr_801588CC.o,tail8.data.o,ov_SC03_114_jr_80159C84.o,tail9.data.o,ov_SC03_114_jr_8015A3C8.o,tail10.data.o,ov_SC03_114_jr_8015AE2C.o,tail11.data.o,ov_SC03_114_jr_8015C32C.o,tail12.data.o,ov_SC03_114_jr_8016AB6C.o,tail13.data.o,ov_SC03_114_jr_801734BC.o,tail14.data.o,ov_SC03_114_jr_80178D40.o,tail15.data.o,ov_SC03_114_jr_8017A4AC.o,tail16.data.o,ov_SC03_114_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_114/ov_SC03_114_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_114/ov_SC03_114_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_114/ov_SC03_114_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2019,7 +2019,7 @@ ov_SC03_115_ELF := $(ov_SC03_115_OUT).elf ov_SC03_115_MAPFILE := $(ov_SC03_115_OUT).map ov_SC03_115_LD_SCRIPT := $(ov_SC03_115_OUT).ld ov_SC03_115_SPLAT_YAML := config/splat.ov_SC03_115.yaml -ov_SC03_115_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_115_jr_8012ACE0.o,tail2.data.o,ov_SC03_115_jr_801380E0.o,tail3.data.o,ov_SC03_115_jr_8013F350.o,tail4.data.o,ov_SC03_115_jr_8013FFD8.o,tail5.data.o,ov_SC03_115_jr_8015444C.o,tail6.data.o,ov_SC03_115_jr_80154C24.o,ov_SC03_115_jr_801588CC.o,tail7.data.o,ov_SC03_115_jr_80159C84.o,tail8.data.o,ov_SC03_115_jr_8015A3C8.o,tail9.data.o,ov_SC03_115_jr_8015AE2C.o,tail10.data.o,ov_SC03_115_jr_8015C32C.o,tail11.data.o,ov_SC03_115_jr_8016AB6C.o,tail12.data.o,ov_SC03_115_jr_801734BC.o,tail13.data.o,ov_SC03_115_jr_80178D40.o,tail14.data.o,ov_SC03_115_jr_8017A4AC.o,tail15.data.o,ov_SC03_115_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_115_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_115_jr_8012ACE0.o,tail2.data.o,ov_SC03_115_jr_801380E0.o,tail3.data.o,ov_SC03_115_jr_8013F350.o,tail4.data.o,ov_SC03_115_jr_8013FFD8.o,tail5.data.o,ov_SC03_115_jr_80140608.o,tail6.data.o,ov_SC03_115_jr_8015444C.o,tail7.data.o,ov_SC03_115_jr_80154C24.o,ov_SC03_115_jr_801588CC.o,tail8.data.o,ov_SC03_115_jr_80159C84.o,tail9.data.o,ov_SC03_115_jr_8015A3C8.o,tail10.data.o,ov_SC03_115_jr_8015AE2C.o,tail11.data.o,ov_SC03_115_jr_8015C32C.o,tail12.data.o,ov_SC03_115_jr_8016AB6C.o,tail13.data.o,ov_SC03_115_jr_801734BC.o,tail14.data.o,ov_SC03_115_jr_80178D40.o,tail15.data.o,ov_SC03_115_jr_8017A4AC.o,tail16.data.o,ov_SC03_115_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_115/ov_SC03_115_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_115/ov_SC03_115_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_115/ov_SC03_115_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2046,7 +2046,7 @@ ov_SC03_116_ELF := $(ov_SC03_116_OUT).elf ov_SC03_116_MAPFILE := $(ov_SC03_116_OUT).map ov_SC03_116_LD_SCRIPT := $(ov_SC03_116_OUT).ld ov_SC03_116_SPLAT_YAML := config/splat.ov_SC03_116.yaml -ov_SC03_116_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_116_jr_8012ACE0.o,tail2.data.o,ov_SC03_116_jr_801380E0.o,tail3.data.o,ov_SC03_116_jr_8013F350.o,tail4.data.o,ov_SC03_116_jr_8013FFD8.o,tail5.data.o,ov_SC03_116_jr_8015444C.o,tail6.data.o,ov_SC03_116_jr_80154C24.o,ov_SC03_116_jr_801588CC.o,tail7.data.o,ov_SC03_116_jr_80159C84.o,tail8.data.o,ov_SC03_116_jr_8015A3C8.o,tail9.data.o,ov_SC03_116_jr_8015AE2C.o,tail10.data.o,ov_SC03_116_jr_8015C32C.o,tail11.data.o,ov_SC03_116_jr_8016AB6C.o,tail12.data.o,ov_SC03_116_jr_801734BC.o,tail13.data.o,ov_SC03_116_jr_80178D40.o,tail14.data.o,ov_SC03_116_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_116_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_116_jr_8012ACE0.o,tail2.data.o,ov_SC03_116_jr_801380E0.o,tail3.data.o,ov_SC03_116_jr_8013F350.o,tail4.data.o,ov_SC03_116_jr_8013FFD8.o,tail5.data.o,ov_SC03_116_jr_80140608.o,tail6.data.o,ov_SC03_116_jr_8015444C.o,tail7.data.o,ov_SC03_116_jr_80154C24.o,ov_SC03_116_jr_801588CC.o,tail8.data.o,ov_SC03_116_jr_80159C84.o,tail9.data.o,ov_SC03_116_jr_8015A3C8.o,tail10.data.o,ov_SC03_116_jr_8015AE2C.o,tail11.data.o,ov_SC03_116_jr_8015C32C.o,tail12.data.o,ov_SC03_116_jr_8016AB6C.o,tail13.data.o,ov_SC03_116_jr_801734BC.o,tail14.data.o,ov_SC03_116_jr_80178D40.o,tail15.data.o,ov_SC03_116_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_116/ov_SC03_116_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_116/ov_SC03_116_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_116/ov_SC03_116_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2073,7 +2073,7 @@ ov_SC03_117_ELF := $(ov_SC03_117_OUT).elf ov_SC03_117_MAPFILE := $(ov_SC03_117_OUT).map ov_SC03_117_LD_SCRIPT := $(ov_SC03_117_OUT).ld ov_SC03_117_SPLAT_YAML := config/splat.ov_SC03_117.yaml -ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117_jr_8012ACE0.o,tail2.data.o,ov_SC03_117_jr_801380E0.o,tail3.data.o,ov_SC03_117_jr_8013F350.o,tail4.data.o,ov_SC03_117_jr_8013FFD8.o,tail5.data.o,ov_SC03_117_jr_8015444C.o,tail6.data.o,ov_SC03_117_jr_80154C24.o,ov_SC03_117_jr_801588CC.o,tail7.data.o,ov_SC03_117_jr_80159C84.o,tail8.data.o,ov_SC03_117_jr_8015A3C8.o,tail9.data.o,ov_SC03_117_jr_8015AE2C.o,tail10.data.o,ov_SC03_117_jr_8015C32C.o,tail11.data.o,ov_SC03_117_jr_8016AB6C.o,tail12.data.o,ov_SC03_117_jr_801734BC.o,tail13.data.o,ov_SC03_117_jr_80178D40.o,tail14.data.o,ov_SC03_117_jr_8017A4AC.o,tail15.data.o,ov_SC03_117_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117_jr_8012ACE0.o,tail2.data.o,ov_SC03_117_jr_801380E0.o,tail3.data.o,ov_SC03_117_jr_8013F350.o,tail4.data.o,ov_SC03_117_jr_8013FFD8.o,tail5.data.o,ov_SC03_117_jr_80140608.o,tail6.data.o,ov_SC03_117_jr_8015444C.o,tail7.data.o,ov_SC03_117_jr_80154C24.o,ov_SC03_117_jr_801588CC.o,tail8.data.o,ov_SC03_117_jr_80159C84.o,tail9.data.o,ov_SC03_117_jr_8015A3C8.o,tail10.data.o,ov_SC03_117_jr_8015AE2C.o,tail11.data.o,ov_SC03_117_jr_8015C32C.o,tail12.data.o,ov_SC03_117_jr_8016AB6C.o,tail13.data.o,ov_SC03_117_jr_801734BC.o,tail14.data.o,ov_SC03_117_jr_80178D40.o,tail15.data.o,ov_SC03_117_jr_8017A4AC.o,tail16.data.o,ov_SC03_117_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_117/ov_SC03_117_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_117/ov_SC03_117_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_117/ov_SC03_117_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2100,7 +2100,7 @@ ov_SC03_118_ELF := $(ov_SC03_118_OUT).elf ov_SC03_118_MAPFILE := $(ov_SC03_118_OUT).map ov_SC03_118_LD_SCRIPT := $(ov_SC03_118_OUT).ld ov_SC03_118_SPLAT_YAML := config/splat.ov_SC03_118.yaml -ov_SC03_118_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_118_jr_8012ACE0.o,tail2.data.o,ov_SC03_118_jr_801380E0.o,tail3.data.o,ov_SC03_118_jr_8013F350.o,tail4.data.o,ov_SC03_118_jr_8013FFD8.o,tail5.data.o,ov_SC03_118_jr_8015444C.o,tail6.data.o,ov_SC03_118_jr_80154C24.o,ov_SC03_118_jr_801588CC.o,tail7.data.o,ov_SC03_118_jr_80159C84.o,tail8.data.o,ov_SC03_118_jr_8015A3C8.o,tail9.data.o,ov_SC03_118_jr_8015AE2C.o,tail10.data.o,ov_SC03_118_jr_8015C32C.o,tail11.data.o,ov_SC03_118_jr_8016AB6C.o,tail12.data.o,ov_SC03_118_jr_801734BC.o,tail13.data.o,ov_SC03_118_jr_80178D40.o,tail14.data.o,ov_SC03_118_jr_8017A4AC.o,tail15.data.o,ov_SC03_118_jr_8017FB84.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_118_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_118_jr_8012ACE0.o,tail2.data.o,ov_SC03_118_jr_801380E0.o,tail3.data.o,ov_SC03_118_jr_8013F350.o,tail4.data.o,ov_SC03_118_jr_8013FFD8.o,tail5.data.o,ov_SC03_118_jr_80140608.o,tail6.data.o,ov_SC03_118_jr_8015444C.o,tail7.data.o,ov_SC03_118_jr_80154C24.o,ov_SC03_118_jr_801588CC.o,tail8.data.o,ov_SC03_118_jr_80159C84.o,tail9.data.o,ov_SC03_118_jr_8015A3C8.o,tail10.data.o,ov_SC03_118_jr_8015AE2C.o,tail11.data.o,ov_SC03_118_jr_8015C32C.o,tail12.data.o,ov_SC03_118_jr_8016AB6C.o,tail13.data.o,ov_SC03_118_jr_801734BC.o,tail14.data.o,ov_SC03_118_jr_80178D40.o,tail15.data.o,ov_SC03_118_jr_8017A4AC.o,tail16.data.o,ov_SC03_118_jr_8017FB84.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_118/ov_SC03_118_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_118/ov_SC03_118_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_118/ov_SC03_118_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2127,7 +2127,7 @@ ov_SC03_119_ELF := $(ov_SC03_119_OUT).elf ov_SC03_119_MAPFILE := $(ov_SC03_119_OUT).map ov_SC03_119_LD_SCRIPT := $(ov_SC03_119_OUT).ld ov_SC03_119_SPLAT_YAML := config/splat.ov_SC03_119.yaml -ov_SC03_119_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_119_jr_8012ACE0.o,tail2.data.o,ov_SC03_119_jr_801380E0.o,tail3.data.o,ov_SC03_119_jr_8013F350.o,tail4.data.o,ov_SC03_119_jr_8013FFD8.o,tail5.data.o,ov_SC03_119_jr_8015444C.o,tail6.data.o,ov_SC03_119_jr_80154C24.o,ov_SC03_119_jr_801588CC.o,tail7.data.o,ov_SC03_119_jr_80159C84.o,tail8.data.o,ov_SC03_119_jr_8015A3C8.o,tail9.data.o,ov_SC03_119_jr_8015AE2C.o,tail10.data.o,ov_SC03_119_jr_8015C32C.o,tail11.data.o,ov_SC03_119_jr_8016AB6C.o,tail12.data.o,ov_SC03_119_jr_801734BC.o,tail13.data.o,ov_SC03_119_jr_80178D40.o,tail14.data.o,ov_SC03_119_jr_8017A4AC.o,tail15.data.o,ov_SC03_119_jr_8017FB84.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_119_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_119_jr_8012ACE0.o,tail2.data.o,ov_SC03_119_jr_801380E0.o,tail3.data.o,ov_SC03_119_jr_8013F350.o,tail4.data.o,ov_SC03_119_jr_8013FFD8.o,tail5.data.o,ov_SC03_119_jr_80140608.o,tail6.data.o,ov_SC03_119_jr_8015444C.o,tail7.data.o,ov_SC03_119_jr_80154C24.o,ov_SC03_119_jr_801588CC.o,tail8.data.o,ov_SC03_119_jr_80159C84.o,tail9.data.o,ov_SC03_119_jr_8015A3C8.o,tail10.data.o,ov_SC03_119_jr_8015AE2C.o,tail11.data.o,ov_SC03_119_jr_8015C32C.o,tail12.data.o,ov_SC03_119_jr_8016AB6C.o,tail13.data.o,ov_SC03_119_jr_801734BC.o,tail14.data.o,ov_SC03_119_jr_80178D40.o,tail15.data.o,ov_SC03_119_jr_8017A4AC.o,tail16.data.o,ov_SC03_119_jr_8017FB84.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_119/ov_SC03_119_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_119/ov_SC03_119_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_119/ov_SC03_119_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2154,7 +2154,7 @@ ov_SC03_121_ELF := $(ov_SC03_121_OUT).elf ov_SC03_121_MAPFILE := $(ov_SC03_121_OUT).map ov_SC03_121_LD_SCRIPT := $(ov_SC03_121_OUT).ld ov_SC03_121_SPLAT_YAML := config/splat.ov_SC03_121.yaml -ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121_jr_8012ACE0.o,tail2.data.o,ov_SC03_121_jr_801380E0.o,tail3.data.o,ov_SC03_121_jr_8013F350.o,tail4.data.o,ov_SC03_121_jr_8013FFD8.o,tail5.data.o,ov_SC03_121_jr_8015444C.o,tail6.data.o,ov_SC03_121_jr_80154C24.o,ov_SC03_121_jr_801588CC.o,tail7.data.o,ov_SC03_121_jr_80159C84.o,tail8.data.o,ov_SC03_121_jr_8015A3C8.o,tail9.data.o,ov_SC03_121_jr_8015AE2C.o,tail10.data.o,ov_SC03_121_jr_8015C32C.o,tail11.data.o,ov_SC03_121_jr_8016AB6C.o,tail12.data.o,ov_SC03_121_jr_801734BC.o,tail13.data.o,ov_SC03_121_jr_80178D40.o,tail14.data.o,ov_SC03_121_jr_8017A4AC.o,tail15.data.o,ov_SC03_121_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121_jr_8012ACE0.o,tail2.data.o,ov_SC03_121_jr_801380E0.o,tail3.data.o,ov_SC03_121_jr_8013F350.o,tail4.data.o,ov_SC03_121_jr_8013FFD8.o,tail5.data.o,ov_SC03_121_jr_80140608.o,tail6.data.o,ov_SC03_121_jr_8015444C.o,tail7.data.o,ov_SC03_121_jr_80154C24.o,ov_SC03_121_jr_801588CC.o,tail8.data.o,ov_SC03_121_jr_80159C84.o,tail9.data.o,ov_SC03_121_jr_8015A3C8.o,tail10.data.o,ov_SC03_121_jr_8015AE2C.o,tail11.data.o,ov_SC03_121_jr_8015C32C.o,tail12.data.o,ov_SC03_121_jr_8016AB6C.o,tail13.data.o,ov_SC03_121_jr_801734BC.o,tail14.data.o,ov_SC03_121_jr_80178D40.o,tail15.data.o,ov_SC03_121_jr_8017A4AC.o,tail16.data.o,ov_SC03_121_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_121/ov_SC03_121_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_121/ov_SC03_121_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_121/ov_SC03_121_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2181,7 +2181,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_jr_8012ACE0.o,tail2.data.o,ov_SC03_124_jr_801380E0.o,tail3.data.o,ov_SC03_124_jr_8013F350.o,tail4.data.o,ov_SC03_124_jr_8013FFD8.o,tail5.data.o,ov_SC03_124_jr_8015444C.o,tail6.data.o,ov_SC03_124_jr_80154C24.o,ov_SC03_124_jr_801588CC.o,tail7.data.o,ov_SC03_124_jr_80159C84.o,tail8.data.o,ov_SC03_124_jr_8015A3C8.o,tail9.data.o,ov_SC03_124_jr_8015AE2C.o,tail10.data.o,ov_SC03_124_jr_8015C32C.o,tail11.data.o,ov_SC03_124_jr_8016AB6C.o,tail12.data.o,ov_SC03_124_jr_801734BC.o,tail13.data.o,ov_SC03_124_jr_80178D40.o,tail14.data.o,ov_SC03_124_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124_jr_8012ACE0.o,tail2.data.o,ov_SC03_124_jr_801380E0.o,tail3.data.o,ov_SC03_124_jr_8013F350.o,tail4.data.o,ov_SC03_124_jr_8013FFD8.o,tail5.data.o,ov_SC03_124_jr_80140608.o,tail6.data.o,ov_SC03_124_jr_8015444C.o,tail7.data.o,ov_SC03_124_jr_80154C24.o,ov_SC03_124_jr_801588CC.o,tail8.data.o,ov_SC03_124_jr_80159C84.o,tail9.data.o,ov_SC03_124_jr_8015A3C8.o,tail10.data.o,ov_SC03_124_jr_8015AE2C.o,tail11.data.o,ov_SC03_124_jr_8015C32C.o,tail12.data.o,ov_SC03_124_jr_8016AB6C.o,tail13.data.o,ov_SC03_124_jr_801734BC.o,tail14.data.o,ov_SC03_124_jr_80178D40.o,tail15.data.o,ov_SC03_124_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_124/ov_SC03_124_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_124/ov_SC03_124_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_124/ov_SC03_124_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2208,7 +2208,7 @@ ov_SC03_125_ELF := $(ov_SC03_125_OUT).elf ov_SC03_125_MAPFILE := $(ov_SC03_125_OUT).map ov_SC03_125_LD_SCRIPT := $(ov_SC03_125_OUT).ld ov_SC03_125_SPLAT_YAML := config/splat.ov_SC03_125.yaml -ov_SC03_125_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_125_jr_8012ACE0.o,tail2.data.o,ov_SC03_125_jr_801380E0.o,tail3.data.o,ov_SC03_125_jr_8013F350.o,tail4.data.o,ov_SC03_125_jr_8013FFD8.o,tail5.data.o,ov_SC03_125_jr_8015444C.o,tail6.data.o,ov_SC03_125_jr_80154C24.o,ov_SC03_125_jr_801588CC.o,tail7.data.o,ov_SC03_125_jr_80159C84.o,tail8.data.o,ov_SC03_125_jr_8015A3C8.o,tail9.data.o,ov_SC03_125_jr_8015AE2C.o,tail10.data.o,ov_SC03_125_jr_8015C32C.o,tail11.data.o,ov_SC03_125_jr_8016AB6C.o,tail12.data.o,ov_SC03_125_jr_801734BC.o,tail13.data.o,ov_SC03_125_jr_80178D40.o,tail14.data.o,ov_SC03_125_jr_8017A4AC.o,tail15.data.o,ov_SC03_125_jr_8017D604.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_125_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_125_jr_8012ACE0.o,tail2.data.o,ov_SC03_125_jr_801380E0.o,tail3.data.o,ov_SC03_125_jr_8013F350.o,tail4.data.o,ov_SC03_125_jr_8013FFD8.o,tail5.data.o,ov_SC03_125_jr_80140608.o,tail6.data.o,ov_SC03_125_jr_8015444C.o,tail7.data.o,ov_SC03_125_jr_80154C24.o,ov_SC03_125_jr_801588CC.o,tail8.data.o,ov_SC03_125_jr_80159C84.o,tail9.data.o,ov_SC03_125_jr_8015A3C8.o,tail10.data.o,ov_SC03_125_jr_8015AE2C.o,tail11.data.o,ov_SC03_125_jr_8015C32C.o,tail12.data.o,ov_SC03_125_jr_8016AB6C.o,tail13.data.o,ov_SC03_125_jr_801734BC.o,tail14.data.o,ov_SC03_125_jr_80178D40.o,tail15.data.o,ov_SC03_125_jr_8017A4AC.o,tail16.data.o,ov_SC03_125_jr_8017D604.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_125/ov_SC03_125_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_125/ov_SC03_125_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_125/ov_SC03_125_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2235,7 +2235,7 @@ ov_SC03_126_ELF := $(ov_SC03_126_OUT).elf ov_SC03_126_MAPFILE := $(ov_SC03_126_OUT).map ov_SC03_126_LD_SCRIPT := $(ov_SC03_126_OUT).ld ov_SC03_126_SPLAT_YAML := config/splat.ov_SC03_126.yaml -ov_SC03_126_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_126_jr_8012ACE0.o,tail2.data.o,ov_SC03_126_jr_801380E0.o,tail3.data.o,ov_SC03_126_jr_8013F350.o,tail4.data.o,ov_SC03_126_jr_8013FFD8.o,tail5.data.o,ov_SC03_126_jr_8015444C.o,tail6.data.o,ov_SC03_126_jr_80154C24.o,ov_SC03_126_jr_801588CC.o,tail7.data.o,ov_SC03_126_jr_80159C84.o,tail8.data.o,ov_SC03_126_jr_8015A3C8.o,tail9.data.o,ov_SC03_126_jr_8015AE2C.o,tail10.data.o,ov_SC03_126_jr_8015C32C.o,tail11.data.o,ov_SC03_126_jr_8016AB6C.o,tail12.data.o,ov_SC03_126_jr_801734BC.o,tail13.data.o,ov_SC03_126_jr_80178D40.o,tail14.data.o,ov_SC03_126_jr_8017A4AC.o,tail15.data.o,ov_SC03_126_jr_8017D5C0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_126_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_126_jr_8012ACE0.o,tail2.data.o,ov_SC03_126_jr_801380E0.o,tail3.data.o,ov_SC03_126_jr_8013F350.o,tail4.data.o,ov_SC03_126_jr_8013FFD8.o,tail5.data.o,ov_SC03_126_jr_80140608.o,tail6.data.o,ov_SC03_126_jr_8015444C.o,tail7.data.o,ov_SC03_126_jr_80154C24.o,ov_SC03_126_jr_801588CC.o,tail8.data.o,ov_SC03_126_jr_80159C84.o,tail9.data.o,ov_SC03_126_jr_8015A3C8.o,tail10.data.o,ov_SC03_126_jr_8015AE2C.o,tail11.data.o,ov_SC03_126_jr_8015C32C.o,tail12.data.o,ov_SC03_126_jr_8016AB6C.o,tail13.data.o,ov_SC03_126_jr_801734BC.o,tail14.data.o,ov_SC03_126_jr_80178D40.o,tail15.data.o,ov_SC03_126_jr_8017A4AC.o,tail16.data.o,ov_SC03_126_jr_8017D5C0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_126/ov_SC03_126_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC03_126/ov_SC03_126_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_126/ov_SC03_126_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2262,7 +2262,7 @@ ov_SC04_002_ELF := $(ov_SC04_002_OUT).elf ov_SC04_002_MAPFILE := $(ov_SC04_002_OUT).map ov_SC04_002_LD_SCRIPT := $(ov_SC04_002_OUT).ld ov_SC04_002_SPLAT_YAML := config/splat.ov_SC04_002.yaml -ov_SC04_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_002_jr_8012ACE0.o,tail2.data.o,ov_SC04_002_jr_801380E0.o,tail3.data.o,ov_SC04_002_jr_8013F350.o,tail4.data.o,ov_SC04_002_jr_8013FFD8.o,tail5.data.o,ov_SC04_002_jr_8015444C.o,tail6.data.o,ov_SC04_002_jr_80154C24.o,ov_SC04_002_jr_801588CC.o,tail7.data.o,ov_SC04_002_jr_80159C84.o,tail8.data.o,ov_SC04_002_jr_8015A3C8.o,tail9.data.o,ov_SC04_002_jr_8015AE2C.o,tail10.data.o,ov_SC04_002_jr_8015C32C.o,tail11.data.o,ov_SC04_002_jr_8016AB6C.o,tail12.data.o,ov_SC04_002_jr_801734BC.o,tail13.data.o,ov_SC04_002_jr_80178D40.o,tail14.data.o,ov_SC04_002_jr_8017A4AC.o,tail15.data.o,ov_SC04_002_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_002_jr_8012ACE0.o,tail2.data.o,ov_SC04_002_jr_801380E0.o,tail3.data.o,ov_SC04_002_jr_8013F350.o,tail4.data.o,ov_SC04_002_jr_8013FFD8.o,tail5.data.o,ov_SC04_002_jr_80140608.o,tail6.data.o,ov_SC04_002_jr_8015444C.o,tail7.data.o,ov_SC04_002_jr_80154C24.o,ov_SC04_002_jr_801588CC.o,tail8.data.o,ov_SC04_002_jr_80159C84.o,tail9.data.o,ov_SC04_002_jr_8015A3C8.o,tail10.data.o,ov_SC04_002_jr_8015AE2C.o,tail11.data.o,ov_SC04_002_jr_8015C32C.o,tail12.data.o,ov_SC04_002_jr_8016AB6C.o,tail13.data.o,ov_SC04_002_jr_801734BC.o,tail14.data.o,ov_SC04_002_jr_80178D40.o,tail15.data.o,ov_SC04_002_jr_8017A4AC.o,tail16.data.o,ov_SC04_002_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_002/ov_SC04_002_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_002/ov_SC04_002_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_002/ov_SC04_002_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2289,7 +2289,7 @@ ov_SC04_003_ELF := $(ov_SC04_003_OUT).elf ov_SC04_003_MAPFILE := $(ov_SC04_003_OUT).map ov_SC04_003_LD_SCRIPT := $(ov_SC04_003_OUT).ld ov_SC04_003_SPLAT_YAML := config/splat.ov_SC04_003.yaml -ov_SC04_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_003_jr_8012ACE0.o,tail2.data.o,ov_SC04_003_jr_801380E0.o,tail3.data.o,ov_SC04_003_jr_8013F350.o,tail4.data.o,ov_SC04_003_jr_8013FFD8.o,tail5.data.o,ov_SC04_003_jr_8015444C.o,tail6.data.o,ov_SC04_003_jr_80154C24.o,ov_SC04_003_jr_801588CC.o,tail7.data.o,ov_SC04_003_jr_80159C84.o,tail8.data.o,ov_SC04_003_jr_8015A3C8.o,tail9.data.o,ov_SC04_003_jr_8015AE2C.o,tail10.data.o,ov_SC04_003_jr_8015C32C.o,tail11.data.o,ov_SC04_003_jr_8016AB6C.o,tail12.data.o,ov_SC04_003_jr_801734BC.o,tail13.data.o,ov_SC04_003_jr_80178D40.o,tail14.data.o,ov_SC04_003_jr_8017A4AC.o,tail15.data.o,ov_SC04_003_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_003_jr_8012ACE0.o,tail2.data.o,ov_SC04_003_jr_801380E0.o,tail3.data.o,ov_SC04_003_jr_8013F350.o,tail4.data.o,ov_SC04_003_jr_8013FFD8.o,tail5.data.o,ov_SC04_003_jr_80140608.o,tail6.data.o,ov_SC04_003_jr_8015444C.o,tail7.data.o,ov_SC04_003_jr_80154C24.o,ov_SC04_003_jr_801588CC.o,tail8.data.o,ov_SC04_003_jr_80159C84.o,tail9.data.o,ov_SC04_003_jr_8015A3C8.o,tail10.data.o,ov_SC04_003_jr_8015AE2C.o,tail11.data.o,ov_SC04_003_jr_8015C32C.o,tail12.data.o,ov_SC04_003_jr_8016AB6C.o,tail13.data.o,ov_SC04_003_jr_801734BC.o,tail14.data.o,ov_SC04_003_jr_80178D40.o,tail15.data.o,ov_SC04_003_jr_8017A4AC.o,tail16.data.o,ov_SC04_003_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_003/ov_SC04_003_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_003/ov_SC04_003_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_003/ov_SC04_003_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2316,7 +2316,7 @@ ov_SC04_004_ELF := $(ov_SC04_004_OUT).elf ov_SC04_004_MAPFILE := $(ov_SC04_004_OUT).map ov_SC04_004_LD_SCRIPT := $(ov_SC04_004_OUT).ld ov_SC04_004_SPLAT_YAML := config/splat.ov_SC04_004.yaml -ov_SC04_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_004_jr_8012ACE0.o,tail2.data.o,ov_SC04_004_jr_801380E0.o,tail3.data.o,ov_SC04_004_jr_8013F350.o,tail4.data.o,ov_SC04_004_jr_8013FFD8.o,tail5.data.o,ov_SC04_004_jr_8015444C.o,tail6.data.o,ov_SC04_004_jr_80154C24.o,ov_SC04_004_jr_801588CC.o,tail7.data.o,ov_SC04_004_jr_80159C84.o,tail8.data.o,ov_SC04_004_jr_8015A3C8.o,tail9.data.o,ov_SC04_004_jr_8015AE2C.o,tail10.data.o,ov_SC04_004_jr_8015C32C.o,tail11.data.o,ov_SC04_004_jr_8016AB6C.o,tail12.data.o,ov_SC04_004_jr_801734BC.o,tail13.data.o,ov_SC04_004_jr_80178D40.o,tail14.data.o,ov_SC04_004_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_004_jr_8012ACE0.o,tail2.data.o,ov_SC04_004_jr_801380E0.o,tail3.data.o,ov_SC04_004_jr_8013F350.o,tail4.data.o,ov_SC04_004_jr_8013FFD8.o,tail5.data.o,ov_SC04_004_jr_80140608.o,tail6.data.o,ov_SC04_004_jr_8015444C.o,tail7.data.o,ov_SC04_004_jr_80154C24.o,ov_SC04_004_jr_801588CC.o,tail8.data.o,ov_SC04_004_jr_80159C84.o,tail9.data.o,ov_SC04_004_jr_8015A3C8.o,tail10.data.o,ov_SC04_004_jr_8015AE2C.o,tail11.data.o,ov_SC04_004_jr_8015C32C.o,tail12.data.o,ov_SC04_004_jr_8016AB6C.o,tail13.data.o,ov_SC04_004_jr_801734BC.o,tail14.data.o,ov_SC04_004_jr_80178D40.o,tail15.data.o,ov_SC04_004_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_004/ov_SC04_004_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_004/ov_SC04_004_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_004/ov_SC04_004_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2343,7 +2343,7 @@ ov_SC04_005_ELF := $(ov_SC04_005_OUT).elf ov_SC04_005_MAPFILE := $(ov_SC04_005_OUT).map ov_SC04_005_LD_SCRIPT := $(ov_SC04_005_OUT).ld ov_SC04_005_SPLAT_YAML := config/splat.ov_SC04_005.yaml -ov_SC04_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_005_jr_8012ACE0.o,tail2.data.o,ov_SC04_005_jr_801380E0.o,tail3.data.o,ov_SC04_005_jr_8013F350.o,tail4.data.o,ov_SC04_005_jr_8013FFD8.o,tail5.data.o,ov_SC04_005_jr_8015444C.o,tail6.data.o,ov_SC04_005_jr_80154C24.o,ov_SC04_005_jr_801588CC.o,tail7.data.o,ov_SC04_005_jr_80159C84.o,tail8.data.o,ov_SC04_005_jr_8015A3C8.o,tail9.data.o,ov_SC04_005_jr_8015AE2C.o,tail10.data.o,ov_SC04_005_jr_8015C32C.o,tail11.data.o,ov_SC04_005_jr_8016AB6C.o,tail12.data.o,ov_SC04_005_jr_801734BC.o,tail13.data.o,ov_SC04_005_jr_80178D40.o,tail14.data.o,ov_SC04_005_jr_8017A4AC.o,tail15.data.o,ov_SC04_005_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_005_jr_8012ACE0.o,tail2.data.o,ov_SC04_005_jr_801380E0.o,tail3.data.o,ov_SC04_005_jr_8013F350.o,tail4.data.o,ov_SC04_005_jr_8013FFD8.o,tail5.data.o,ov_SC04_005_jr_80140608.o,tail6.data.o,ov_SC04_005_jr_8015444C.o,tail7.data.o,ov_SC04_005_jr_80154C24.o,ov_SC04_005_jr_801588CC.o,tail8.data.o,ov_SC04_005_jr_80159C84.o,tail9.data.o,ov_SC04_005_jr_8015A3C8.o,tail10.data.o,ov_SC04_005_jr_8015AE2C.o,tail11.data.o,ov_SC04_005_jr_8015C32C.o,tail12.data.o,ov_SC04_005_jr_8016AB6C.o,tail13.data.o,ov_SC04_005_jr_801734BC.o,tail14.data.o,ov_SC04_005_jr_80178D40.o,tail15.data.o,ov_SC04_005_jr_8017A4AC.o,tail16.data.o,ov_SC04_005_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_005/ov_SC04_005_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_005/ov_SC04_005_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_005/ov_SC04_005_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2370,7 +2370,7 @@ ov_SC04_006_ELF := $(ov_SC04_006_OUT).elf ov_SC04_006_MAPFILE := $(ov_SC04_006_OUT).map ov_SC04_006_LD_SCRIPT := $(ov_SC04_006_OUT).ld ov_SC04_006_SPLAT_YAML := config/splat.ov_SC04_006.yaml -ov_SC04_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_006_jr_8012ACE0.o,tail2.data.o,ov_SC04_006_jr_801380E0.o,tail3.data.o,ov_SC04_006_jr_8013F350.o,tail4.data.o,ov_SC04_006_jr_8013FFD8.o,tail5.data.o,ov_SC04_006_jr_8015444C.o,tail6.data.o,ov_SC04_006_jr_80154C24.o,ov_SC04_006_jr_801588CC.o,tail7.data.o,ov_SC04_006_jr_80159C84.o,tail8.data.o,ov_SC04_006_jr_8015A3C8.o,tail9.data.o,ov_SC04_006_jr_8015AE2C.o,tail10.data.o,ov_SC04_006_jr_8015C32C.o,tail11.data.o,ov_SC04_006_jr_8016AB6C.o,tail12.data.o,ov_SC04_006_jr_801734BC.o,tail13.data.o,ov_SC04_006_jr_80178D40.o,tail14.data.o,ov_SC04_006_jr_8017A4AC.o,tail15.data.o,ov_SC04_006_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_006_jr_8012ACE0.o,tail2.data.o,ov_SC04_006_jr_801380E0.o,tail3.data.o,ov_SC04_006_jr_8013F350.o,tail4.data.o,ov_SC04_006_jr_8013FFD8.o,tail5.data.o,ov_SC04_006_jr_80140608.o,tail6.data.o,ov_SC04_006_jr_8015444C.o,tail7.data.o,ov_SC04_006_jr_80154C24.o,ov_SC04_006_jr_801588CC.o,tail8.data.o,ov_SC04_006_jr_80159C84.o,tail9.data.o,ov_SC04_006_jr_8015A3C8.o,tail10.data.o,ov_SC04_006_jr_8015AE2C.o,tail11.data.o,ov_SC04_006_jr_8015C32C.o,tail12.data.o,ov_SC04_006_jr_8016AB6C.o,tail13.data.o,ov_SC04_006_jr_801734BC.o,tail14.data.o,ov_SC04_006_jr_80178D40.o,tail15.data.o,ov_SC04_006_jr_8017A4AC.o,tail16.data.o,ov_SC04_006_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_006/ov_SC04_006_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_006/ov_SC04_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_006/ov_SC04_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2397,7 +2397,7 @@ ov_SC04_007_ELF := $(ov_SC04_007_OUT).elf ov_SC04_007_MAPFILE := $(ov_SC04_007_OUT).map ov_SC04_007_LD_SCRIPT := $(ov_SC04_007_OUT).ld ov_SC04_007_SPLAT_YAML := config/splat.ov_SC04_007.yaml -ov_SC04_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_007_jr_8012ACE0.o,tail2.data.o,ov_SC04_007_jr_801380E0.o,tail3.data.o,ov_SC04_007_jr_8013F350.o,tail4.data.o,ov_SC04_007_jr_8013FFD8.o,tail5.data.o,ov_SC04_007_jr_8015444C.o,tail6.data.o,ov_SC04_007_jr_80154C24.o,ov_SC04_007_jr_801588CC.o,tail7.data.o,ov_SC04_007_jr_80159C84.o,tail8.data.o,ov_SC04_007_jr_8015A3C8.o,tail9.data.o,ov_SC04_007_jr_8015AE2C.o,tail10.data.o,ov_SC04_007_jr_8015C32C.o,tail11.data.o,ov_SC04_007_jr_8016AB6C.o,tail12.data.o,ov_SC04_007_jr_801734BC.o,tail13.data.o,ov_SC04_007_jr_80178D40.o,tail14.data.o,ov_SC04_007_jr_8017A4AC.o,tail15.data.o,ov_SC04_007_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_007_jr_8012ACE0.o,tail2.data.o,ov_SC04_007_jr_801380E0.o,tail3.data.o,ov_SC04_007_jr_8013F350.o,tail4.data.o,ov_SC04_007_jr_8013FFD8.o,tail5.data.o,ov_SC04_007_jr_80140608.o,tail6.data.o,ov_SC04_007_jr_8015444C.o,tail7.data.o,ov_SC04_007_jr_80154C24.o,ov_SC04_007_jr_801588CC.o,tail8.data.o,ov_SC04_007_jr_80159C84.o,tail9.data.o,ov_SC04_007_jr_8015A3C8.o,tail10.data.o,ov_SC04_007_jr_8015AE2C.o,tail11.data.o,ov_SC04_007_jr_8015C32C.o,tail12.data.o,ov_SC04_007_jr_8016AB6C.o,tail13.data.o,ov_SC04_007_jr_801734BC.o,tail14.data.o,ov_SC04_007_jr_80178D40.o,tail15.data.o,ov_SC04_007_jr_8017A4AC.o,tail16.data.o,ov_SC04_007_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_007/ov_SC04_007_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_007/ov_SC04_007_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_007/ov_SC04_007_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2424,7 +2424,7 @@ ov_SC04_008_ELF := $(ov_SC04_008_OUT).elf ov_SC04_008_MAPFILE := $(ov_SC04_008_OUT).map ov_SC04_008_LD_SCRIPT := $(ov_SC04_008_OUT).ld ov_SC04_008_SPLAT_YAML := config/splat.ov_SC04_008.yaml -ov_SC04_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_008_jr_8012ACE0.o,tail2.data.o,ov_SC04_008_jr_801380E0.o,tail3.data.o,ov_SC04_008_jr_8013F350.o,tail4.data.o,ov_SC04_008_jr_8013FFD8.o,tail5.data.o,ov_SC04_008_jr_8015444C.o,tail6.data.o,ov_SC04_008_jr_80154C24.o,ov_SC04_008_jr_801588CC.o,tail7.data.o,ov_SC04_008_jr_80159C84.o,tail8.data.o,ov_SC04_008_jr_8015AE2C.o,tail9.data.o,ov_SC04_008_jr_8015C32C.o,tail10.data.o,ov_SC04_008_jr_8016AB6C.o,tail11.data.o,ov_SC04_008_jr_801734BC.o,tail12.data.o,ov_SC04_008_jr_80178D40.o,tail13.data.o,ov_SC04_008_jr_8017A4AC.o,tail14.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_008_jr_8012ACE0.o,tail2.data.o,ov_SC04_008_jr_801380E0.o,tail3.data.o,ov_SC04_008_jr_8013F350.o,tail4.data.o,ov_SC04_008_jr_8013FFD8.o,tail5.data.o,ov_SC04_008_jr_80140608.o,tail6.data.o,ov_SC04_008_jr_8015444C.o,tail7.data.o,ov_SC04_008_jr_80154C24.o,ov_SC04_008_jr_801588CC.o,tail8.data.o,ov_SC04_008_jr_80159C84.o,tail9.data.o,ov_SC04_008_jr_8015AE2C.o,tail10.data.o,ov_SC04_008_jr_8015C32C.o,tail11.data.o,ov_SC04_008_jr_8016AB6C.o,tail12.data.o,ov_SC04_008_jr_801734BC.o,tail13.data.o,ov_SC04_008_jr_80178D40.o,tail14.data.o,ov_SC04_008_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_008/ov_SC04_008_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_008/ov_SC04_008_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_008/ov_SC04_008_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2451,7 +2451,7 @@ ov_SC04_009_ELF := $(ov_SC04_009_OUT).elf ov_SC04_009_MAPFILE := $(ov_SC04_009_OUT).map ov_SC04_009_LD_SCRIPT := $(ov_SC04_009_OUT).ld ov_SC04_009_SPLAT_YAML := config/splat.ov_SC04_009.yaml -ov_SC04_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_009_jr_8012ACE0.o,tail2.data.o,ov_SC04_009_jr_801380E0.o,tail3.data.o,ov_SC04_009_jr_8013F350.o,tail4.data.o,ov_SC04_009_jr_8013FFD8.o,tail5.data.o,ov_SC04_009_jr_8015444C.o,tail6.data.o,ov_SC04_009_jr_80154C24.o,ov_SC04_009_jr_801588CC.o,tail7.data.o,ov_SC04_009_jr_80159C84.o,tail8.data.o,ov_SC04_009_jr_8015A3C8.o,tail9.data.o,ov_SC04_009_jr_8015AE2C.o,tail10.data.o,ov_SC04_009_jr_8015C32C.o,tail11.data.o,ov_SC04_009_jr_8016AB6C.o,tail12.data.o,ov_SC04_009_jr_801734BC.o,tail13.data.o,ov_SC04_009_jr_80178D40.o,tail14.data.o,ov_SC04_009_jr_8017A4AC.o,tail15.data.o,ov_SC04_009_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_009_jr_8012ACE0.o,tail2.data.o,ov_SC04_009_jr_801380E0.o,tail3.data.o,ov_SC04_009_jr_8013F350.o,tail4.data.o,ov_SC04_009_jr_8013FFD8.o,tail5.data.o,ov_SC04_009_jr_80140608.o,tail6.data.o,ov_SC04_009_jr_8015444C.o,tail7.data.o,ov_SC04_009_jr_80154C24.o,ov_SC04_009_jr_801588CC.o,tail8.data.o,ov_SC04_009_jr_80159C84.o,tail9.data.o,ov_SC04_009_jr_8015A3C8.o,tail10.data.o,ov_SC04_009_jr_8015AE2C.o,tail11.data.o,ov_SC04_009_jr_8015C32C.o,tail12.data.o,ov_SC04_009_jr_8016AB6C.o,tail13.data.o,ov_SC04_009_jr_801734BC.o,tail14.data.o,ov_SC04_009_jr_80178D40.o,tail15.data.o,ov_SC04_009_jr_8017A4AC.o,tail16.data.o,ov_SC04_009_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_009/ov_SC04_009_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_009/ov_SC04_009_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_009/ov_SC04_009_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2478,7 +2478,7 @@ ov_SC04_010_ELF := $(ov_SC04_010_OUT).elf ov_SC04_010_MAPFILE := $(ov_SC04_010_OUT).map ov_SC04_010_LD_SCRIPT := $(ov_SC04_010_OUT).ld ov_SC04_010_SPLAT_YAML := config/splat.ov_SC04_010.yaml -ov_SC04_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_010_jr_8012ACE0.o,tail2.data.o,ov_SC04_010_jr_801380E0.o,tail3.data.o,ov_SC04_010_jr_8013F350.o,tail4.data.o,ov_SC04_010_jr_8013FFD8.o,tail5.data.o,ov_SC04_010_jr_8015444C.o,tail6.data.o,ov_SC04_010_jr_80154C24.o,ov_SC04_010_jr_801588CC.o,tail7.data.o,ov_SC04_010_jr_80159C84.o,tail8.data.o,ov_SC04_010_jr_8015A3C8.o,tail9.data.o,ov_SC04_010_jr_8015AE2C.o,tail10.data.o,ov_SC04_010_jr_8015C32C.o,tail11.data.o,ov_SC04_010_jr_8016AB6C.o,tail12.data.o,ov_SC04_010_jr_801734BC.o,tail13.data.o,ov_SC04_010_jr_80178D40.o,tail14.data.o,ov_SC04_010_jr_8017A4AC.o,tail15.data.o,ov_SC04_010_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_010_jr_8012ACE0.o,tail2.data.o,ov_SC04_010_jr_801380E0.o,tail3.data.o,ov_SC04_010_jr_8013F350.o,tail4.data.o,ov_SC04_010_jr_8013FFD8.o,tail5.data.o,ov_SC04_010_jr_80140608.o,tail6.data.o,ov_SC04_010_jr_8015444C.o,tail7.data.o,ov_SC04_010_jr_80154C24.o,ov_SC04_010_jr_801588CC.o,tail8.data.o,ov_SC04_010_jr_80159C84.o,tail9.data.o,ov_SC04_010_jr_8015A3C8.o,tail10.data.o,ov_SC04_010_jr_8015AE2C.o,tail11.data.o,ov_SC04_010_jr_8015C32C.o,tail12.data.o,ov_SC04_010_jr_8016AB6C.o,tail13.data.o,ov_SC04_010_jr_801734BC.o,tail14.data.o,ov_SC04_010_jr_80178D40.o,tail15.data.o,ov_SC04_010_jr_8017A4AC.o,tail16.data.o,ov_SC04_010_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_010/ov_SC04_010_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_010/ov_SC04_010_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_010/ov_SC04_010_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2505,7 +2505,7 @@ ov_SC04_011_ELF := $(ov_SC04_011_OUT).elf ov_SC04_011_MAPFILE := $(ov_SC04_011_OUT).map ov_SC04_011_LD_SCRIPT := $(ov_SC04_011_OUT).ld ov_SC04_011_SPLAT_YAML := config/splat.ov_SC04_011.yaml -ov_SC04_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_011_jr_8012ACE0.o,tail2.data.o,ov_SC04_011_jr_801380E0.o,tail3.data.o,ov_SC04_011_jr_8013F350.o,tail4.data.o,ov_SC04_011_jr_8013FFD8.o,tail5.data.o,ov_SC04_011_jr_8015444C.o,tail6.data.o,ov_SC04_011_jr_80154C24.o,ov_SC04_011_jr_801588CC.o,tail7.data.o,ov_SC04_011_jr_80159C84.o,tail8.data.o,ov_SC04_011_jr_8015A3C8.o,tail9.data.o,ov_SC04_011_jr_8015AE2C.o,tail10.data.o,ov_SC04_011_jr_8015C32C.o,tail11.data.o,ov_SC04_011_jr_8016AB6C.o,tail12.data.o,ov_SC04_011_jr_801734BC.o,tail13.data.o,ov_SC04_011_jr_80178D40.o,tail14.data.o,ov_SC04_011_jr_8017A4AC.o,tail15.data.o,ov_SC04_011_jr_8017D494.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_011_jr_8012ACE0.o,tail2.data.o,ov_SC04_011_jr_801380E0.o,tail3.data.o,ov_SC04_011_jr_8013F350.o,tail4.data.o,ov_SC04_011_jr_8013FFD8.o,tail5.data.o,ov_SC04_011_jr_80140608.o,tail6.data.o,ov_SC04_011_jr_8015444C.o,tail7.data.o,ov_SC04_011_jr_80154C24.o,ov_SC04_011_jr_801588CC.o,tail8.data.o,ov_SC04_011_jr_80159C84.o,tail9.data.o,ov_SC04_011_jr_8015A3C8.o,tail10.data.o,ov_SC04_011_jr_8015AE2C.o,tail11.data.o,ov_SC04_011_jr_8015C32C.o,tail12.data.o,ov_SC04_011_jr_8016AB6C.o,tail13.data.o,ov_SC04_011_jr_801734BC.o,tail14.data.o,ov_SC04_011_jr_80178D40.o,tail15.data.o,ov_SC04_011_jr_8017A4AC.o,tail16.data.o,ov_SC04_011_jr_8017D494.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2532,7 +2532,7 @@ ov_SC04_012_ELF := $(ov_SC04_012_OUT).elf ov_SC04_012_MAPFILE := $(ov_SC04_012_OUT).map ov_SC04_012_LD_SCRIPT := $(ov_SC04_012_OUT).ld ov_SC04_012_SPLAT_YAML := config/splat.ov_SC04_012.yaml -ov_SC04_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_012_jr_8012ACE0.o,tail2.data.o,ov_SC04_012_jr_801380E0.o,tail3.data.o,ov_SC04_012_jr_8013F350.o,tail4.data.o,ov_SC04_012_jr_8013FFD8.o,tail5.data.o,ov_SC04_012_jr_8015444C.o,tail6.data.o,ov_SC04_012_jr_80154C24.o,ov_SC04_012_jr_801588CC.o,tail7.data.o,ov_SC04_012_jr_80159C84.o,tail8.data.o,ov_SC04_012_jr_8015A3C8.o,tail9.data.o,ov_SC04_012_jr_8015AE2C.o,tail10.data.o,ov_SC04_012_jr_8015C32C.o,tail11.data.o,ov_SC04_012_jr_8016AB6C.o,tail12.data.o,ov_SC04_012_jr_801734BC.o,tail13.data.o,ov_SC04_012_jr_80178D40.o,tail14.data.o,ov_SC04_012_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_012_jr_8012ACE0.o,tail2.data.o,ov_SC04_012_jr_801380E0.o,tail3.data.o,ov_SC04_012_jr_8013F350.o,tail4.data.o,ov_SC04_012_jr_8013FFD8.o,tail5.data.o,ov_SC04_012_jr_80140608.o,tail6.data.o,ov_SC04_012_jr_8015444C.o,tail7.data.o,ov_SC04_012_jr_80154C24.o,ov_SC04_012_jr_801588CC.o,tail8.data.o,ov_SC04_012_jr_80159C84.o,tail9.data.o,ov_SC04_012_jr_8015A3C8.o,tail10.data.o,ov_SC04_012_jr_8015AE2C.o,tail11.data.o,ov_SC04_012_jr_8015C32C.o,tail12.data.o,ov_SC04_012_jr_8016AB6C.o,tail13.data.o,ov_SC04_012_jr_801734BC.o,tail14.data.o,ov_SC04_012_jr_80178D40.o,tail15.data.o,ov_SC04_012_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_012/ov_SC04_012_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_012/ov_SC04_012_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_012/ov_SC04_012_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2559,7 +2559,7 @@ ov_SC04_015_ELF := $(ov_SC04_015_OUT).elf ov_SC04_015_MAPFILE := $(ov_SC04_015_OUT).map ov_SC04_015_LD_SCRIPT := $(ov_SC04_015_OUT).ld ov_SC04_015_SPLAT_YAML := config/splat.ov_SC04_015.yaml -ov_SC04_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_015_jr_8012ACE0.o,tail2.data.o,ov_SC04_015_jr_801380E0.o,tail3.data.o,ov_SC04_015_jr_8013F350.o,tail4.data.o,ov_SC04_015_jr_8013FFD8.o,tail5.data.o,ov_SC04_015_jr_8015444C.o,tail6.data.o,ov_SC04_015_jr_80154C24.o,ov_SC04_015_jr_801588CC.o,tail7.data.o,ov_SC04_015_jr_80159C84.o,tail8.data.o,ov_SC04_015_jr_8015A3C8.o,tail9.data.o,ov_SC04_015_jr_8015AE2C.o,tail10.data.o,ov_SC04_015_jr_8015C32C.o,tail11.data.o,ov_SC04_015_jr_8016AB6C.o,tail12.data.o,ov_SC04_015_jr_801734BC.o,tail13.data.o,ov_SC04_015_jr_80178D40.o,tail14.data.o,ov_SC04_015_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_015_jr_8012ACE0.o,tail2.data.o,ov_SC04_015_jr_801380E0.o,tail3.data.o,ov_SC04_015_jr_8013F350.o,tail4.data.o,ov_SC04_015_jr_8013FFD8.o,tail5.data.o,ov_SC04_015_jr_80140608.o,tail6.data.o,ov_SC04_015_jr_8015444C.o,tail7.data.o,ov_SC04_015_jr_80154C24.o,ov_SC04_015_jr_801588CC.o,tail8.data.o,ov_SC04_015_jr_80159C84.o,tail9.data.o,ov_SC04_015_jr_8015A3C8.o,tail10.data.o,ov_SC04_015_jr_8015AE2C.o,tail11.data.o,ov_SC04_015_jr_8015C32C.o,tail12.data.o,ov_SC04_015_jr_8016AB6C.o,tail13.data.o,ov_SC04_015_jr_801734BC.o,tail14.data.o,ov_SC04_015_jr_80178D40.o,tail15.data.o,ov_SC04_015_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_015/ov_SC04_015_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_015/ov_SC04_015_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_015/ov_SC04_015_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2586,7 +2586,7 @@ ov_SC04_016_ELF := $(ov_SC04_016_OUT).elf ov_SC04_016_MAPFILE := $(ov_SC04_016_OUT).map ov_SC04_016_LD_SCRIPT := $(ov_SC04_016_OUT).ld ov_SC04_016_SPLAT_YAML := config/splat.ov_SC04_016.yaml -ov_SC04_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_016_jr_8012ACE0.o,tail2.data.o,ov_SC04_016_jr_801380E0.o,tail3.data.o,ov_SC04_016_jr_8013F350.o,tail4.data.o,ov_SC04_016_jr_8013FFD8.o,tail5.data.o,ov_SC04_016_jr_8015444C.o,tail6.data.o,ov_SC04_016_jr_80154C24.o,ov_SC04_016_jr_801588CC.o,tail7.data.o,ov_SC04_016_jr_80159C84.o,tail8.data.o,ov_SC04_016_jr_8015A3C8.o,tail9.data.o,ov_SC04_016_jr_8015AE2C.o,tail10.data.o,ov_SC04_016_jr_8015C32C.o,tail11.data.o,ov_SC04_016_jr_8016AB6C.o,tail12.data.o,ov_SC04_016_jr_801734BC.o,tail13.data.o,ov_SC04_016_jr_80178D40.o,tail14.data.o,ov_SC04_016_jr_8017A4AC.o,tail15.data.o,ov_SC04_016_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_016_jr_8012ACE0.o,tail2.data.o,ov_SC04_016_jr_801380E0.o,tail3.data.o,ov_SC04_016_jr_8013F350.o,tail4.data.o,ov_SC04_016_jr_8013FFD8.o,tail5.data.o,ov_SC04_016_jr_80140608.o,tail6.data.o,ov_SC04_016_jr_8015444C.o,tail7.data.o,ov_SC04_016_jr_80154C24.o,ov_SC04_016_jr_801588CC.o,tail8.data.o,ov_SC04_016_jr_80159C84.o,tail9.data.o,ov_SC04_016_jr_8015A3C8.o,tail10.data.o,ov_SC04_016_jr_8015AE2C.o,tail11.data.o,ov_SC04_016_jr_8015C32C.o,tail12.data.o,ov_SC04_016_jr_8016AB6C.o,tail13.data.o,ov_SC04_016_jr_801734BC.o,tail14.data.o,ov_SC04_016_jr_80178D40.o,tail15.data.o,ov_SC04_016_jr_8017A4AC.o,tail16.data.o,ov_SC04_016_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_016/ov_SC04_016_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_016/ov_SC04_016_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_016/ov_SC04_016_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2613,7 +2613,7 @@ ov_SC04_020_ELF := $(ov_SC04_020_OUT).elf ov_SC04_020_MAPFILE := $(ov_SC04_020_OUT).map ov_SC04_020_LD_SCRIPT := $(ov_SC04_020_OUT).ld ov_SC04_020_SPLAT_YAML := config/splat.ov_SC04_020.yaml -ov_SC04_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_020_jr_8012ACE0.o,tail2.data.o,ov_SC04_020_jr_801380E0.o,tail3.data.o,ov_SC04_020_jr_8013F350.o,tail4.data.o,ov_SC04_020_jr_8013FFD8.o,tail5.data.o,ov_SC04_020_jr_8015444C.o,tail6.data.o,ov_SC04_020_jr_80154C24.o,ov_SC04_020_jr_801588CC.o,tail7.data.o,ov_SC04_020_jr_80159C84.o,tail8.data.o,ov_SC04_020_jr_8015A3C8.o,tail9.data.o,ov_SC04_020_jr_8015AE2C.o,tail10.data.o,ov_SC04_020_jr_8015C32C.o,tail11.data.o,ov_SC04_020_jr_8016AB6C.o,tail12.data.o,ov_SC04_020_jr_801734BC.o,tail13.data.o,ov_SC04_020_jr_80178D40.o,tail14.data.o,ov_SC04_020_jr_8017A4AC.o,tail15.data.o,ov_SC04_020_jr_8017D604.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_020_jr_8012ACE0.o,tail2.data.o,ov_SC04_020_jr_801380E0.o,tail3.data.o,ov_SC04_020_jr_8013F350.o,tail4.data.o,ov_SC04_020_jr_8013FFD8.o,tail5.data.o,ov_SC04_020_jr_80140608.o,tail6.data.o,ov_SC04_020_jr_8015444C.o,tail7.data.o,ov_SC04_020_jr_80154C24.o,ov_SC04_020_jr_801588CC.o,tail8.data.o,ov_SC04_020_jr_80159C84.o,tail9.data.o,ov_SC04_020_jr_8015A3C8.o,tail10.data.o,ov_SC04_020_jr_8015AE2C.o,tail11.data.o,ov_SC04_020_jr_8015C32C.o,tail12.data.o,ov_SC04_020_jr_8016AB6C.o,tail13.data.o,ov_SC04_020_jr_801734BC.o,tail14.data.o,ov_SC04_020_jr_80178D40.o,tail15.data.o,ov_SC04_020_jr_8017A4AC.o,tail16.data.o,ov_SC04_020_jr_8017D604.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_020/ov_SC04_020_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_020/ov_SC04_020_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_020/ov_SC04_020_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2640,7 +2640,7 @@ ov_SC04_021_ELF := $(ov_SC04_021_OUT).elf ov_SC04_021_MAPFILE := $(ov_SC04_021_OUT).map ov_SC04_021_LD_SCRIPT := $(ov_SC04_021_OUT).ld ov_SC04_021_SPLAT_YAML := config/splat.ov_SC04_021.yaml -ov_SC04_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_021_jr_8012ACE0.o,tail2.data.o,ov_SC04_021_jr_801380E0.o,tail3.data.o,ov_SC04_021_jr_8013F350.o,tail4.data.o,ov_SC04_021_jr_8013FFD8.o,tail5.data.o,ov_SC04_021_jr_8015444C.o,tail6.data.o,ov_SC04_021_jr_80154C24.o,ov_SC04_021_jr_801588CC.o,tail7.data.o,ov_SC04_021_jr_80159C84.o,tail8.data.o,ov_SC04_021_jr_8015A3C8.o,tail9.data.o,ov_SC04_021_jr_8015AE2C.o,tail10.data.o,ov_SC04_021_jr_8015C32C.o,tail11.data.o,ov_SC04_021_jr_8016AB6C.o,tail12.data.o,ov_SC04_021_jr_801734BC.o,tail13.data.o,ov_SC04_021_jr_80178D40.o,tail14.data.o,ov_SC04_021_jr_8017A4AC.o,tail15.data.o,ov_SC04_021_jr_8017D5C0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_021_jr_8012ACE0.o,tail2.data.o,ov_SC04_021_jr_801380E0.o,tail3.data.o,ov_SC04_021_jr_8013F350.o,tail4.data.o,ov_SC04_021_jr_8013FFD8.o,tail5.data.o,ov_SC04_021_jr_80140608.o,tail6.data.o,ov_SC04_021_jr_8015444C.o,tail7.data.o,ov_SC04_021_jr_80154C24.o,ov_SC04_021_jr_801588CC.o,tail8.data.o,ov_SC04_021_jr_80159C84.o,tail9.data.o,ov_SC04_021_jr_8015A3C8.o,tail10.data.o,ov_SC04_021_jr_8015AE2C.o,tail11.data.o,ov_SC04_021_jr_8015C32C.o,tail12.data.o,ov_SC04_021_jr_8016AB6C.o,tail13.data.o,ov_SC04_021_jr_801734BC.o,tail14.data.o,ov_SC04_021_jr_80178D40.o,tail15.data.o,ov_SC04_021_jr_8017A4AC.o,tail16.data.o,ov_SC04_021_jr_8017D5C0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_021/ov_SC04_021_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC04_021/ov_SC04_021_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC04_021/ov_SC04_021_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2667,7 +2667,7 @@ ov_SC05_001_ELF := $(ov_SC05_001_OUT).elf ov_SC05_001_MAPFILE := $(ov_SC05_001_OUT).map ov_SC05_001_LD_SCRIPT := $(ov_SC05_001_OUT).ld ov_SC05_001_SPLAT_YAML := config/splat.ov_SC05_001.yaml -ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001_jr_8012ACE0.o,tail2.data.o,ov_SC05_001_jr_801380E0.o,tail3.data.o,ov_SC05_001_jr_8013F350.o,tail4.data.o,ov_SC05_001_jr_8013FFD8.o,tail5.data.o,ov_SC05_001_jr_8015444C.o,tail6.data.o,ov_SC05_001_jr_80154C24.o,ov_SC05_001_jr_801588CC.o,tail7.data.o,ov_SC05_001_jr_80159C84.o,tail8.data.o,ov_SC05_001_jr_8015A3C8.o,tail9.data.o,ov_SC05_001_jr_8015AE2C.o,tail10.data.o,ov_SC05_001_jr_8015C32C.o,tail11.data.o,ov_SC05_001_jr_8016AB6C.o,tail12.data.o,ov_SC05_001_jr_801734BC.o,tail13.data.o,ov_SC05_001_jr_80178D40.o,tail14.data.o,ov_SC05_001_jr_8017A4AC.o,tail15.data.o,ov_SC05_001_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001_jr_8012ACE0.o,tail2.data.o,ov_SC05_001_jr_801380E0.o,tail3.data.o,ov_SC05_001_jr_8013F350.o,tail4.data.o,ov_SC05_001_jr_8013FFD8.o,tail5.data.o,ov_SC05_001_jr_80140608.o,tail6.data.o,ov_SC05_001_jr_8015444C.o,tail7.data.o,ov_SC05_001_jr_80154C24.o,ov_SC05_001_jr_801588CC.o,tail8.data.o,ov_SC05_001_jr_80159C84.o,tail9.data.o,ov_SC05_001_jr_8015A3C8.o,tail10.data.o,ov_SC05_001_jr_8015AE2C.o,tail11.data.o,ov_SC05_001_jr_8015C32C.o,tail12.data.o,ov_SC05_001_jr_8016AB6C.o,tail13.data.o,ov_SC05_001_jr_801734BC.o,tail14.data.o,ov_SC05_001_jr_80178D40.o,tail15.data.o,ov_SC05_001_jr_8017A4AC.o,tail16.data.o,ov_SC05_001_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_001/ov_SC05_001_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_001/ov_SC05_001_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_001/ov_SC05_001_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2694,7 +2694,7 @@ ov_SC05_002_ELF := $(ov_SC05_002_OUT).elf ov_SC05_002_MAPFILE := $(ov_SC05_002_OUT).map ov_SC05_002_LD_SCRIPT := $(ov_SC05_002_OUT).ld ov_SC05_002_SPLAT_YAML := config/splat.ov_SC05_002.yaml -ov_SC05_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_002_jr_8012ACE0.o,tail2.data.o,ov_SC05_002_jr_801380E0.o,tail3.data.o,ov_SC05_002_jr_8013F350.o,tail4.data.o,ov_SC05_002_jr_8013FFD8.o,tail5.data.o,ov_SC05_002_jr_8015444C.o,tail6.data.o,ov_SC05_002_jr_80154C24.o,ov_SC05_002_jr_801588CC.o,tail7.data.o,ov_SC05_002_jr_80159C84.o,tail8.data.o,ov_SC05_002_jr_8015A3C8.o,tail9.data.o,ov_SC05_002_jr_8015AE2C.o,tail10.data.o,ov_SC05_002_jr_8015C32C.o,tail11.data.o,ov_SC05_002_jr_8016AB6C.o,tail12.data.o,ov_SC05_002_jr_801734BC.o,tail13.data.o,ov_SC05_002_jr_80178D40.o,tail14.data.o,ov_SC05_002_jr_8017A4AC.o,tail15.data.o,ov_SC05_002_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_002_jr_8012ACE0.o,tail2.data.o,ov_SC05_002_jr_801380E0.o,tail3.data.o,ov_SC05_002_jr_8013F350.o,tail4.data.o,ov_SC05_002_jr_8013FFD8.o,tail5.data.o,ov_SC05_002_jr_80140608.o,tail6.data.o,ov_SC05_002_jr_8015444C.o,tail7.data.o,ov_SC05_002_jr_80154C24.o,ov_SC05_002_jr_801588CC.o,tail8.data.o,ov_SC05_002_jr_80159C84.o,tail9.data.o,ov_SC05_002_jr_8015A3C8.o,tail10.data.o,ov_SC05_002_jr_8015AE2C.o,tail11.data.o,ov_SC05_002_jr_8015C32C.o,tail12.data.o,ov_SC05_002_jr_8016AB6C.o,tail13.data.o,ov_SC05_002_jr_801734BC.o,tail14.data.o,ov_SC05_002_jr_80178D40.o,tail15.data.o,ov_SC05_002_jr_8017A4AC.o,tail16.data.o,ov_SC05_002_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_002/ov_SC05_002_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_002/ov_SC05_002_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_002/ov_SC05_002_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2721,7 +2721,7 @@ ov_SC05_003_ELF := $(ov_SC05_003_OUT).elf ov_SC05_003_MAPFILE := $(ov_SC05_003_OUT).map ov_SC05_003_LD_SCRIPT := $(ov_SC05_003_OUT).ld ov_SC05_003_SPLAT_YAML := config/splat.ov_SC05_003.yaml -ov_SC05_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_003_jr_8012ACE0.o,tail2.data.o,ov_SC05_003_jr_801380E0.o,tail3.data.o,ov_SC05_003_jr_8013F350.o,tail4.data.o,ov_SC05_003_jr_8013FFD8.o,tail5.data.o,ov_SC05_003_jr_8015444C.o,tail6.data.o,ov_SC05_003_jr_80154C24.o,ov_SC05_003_jr_801588CC.o,tail7.data.o,ov_SC05_003_jr_80159C84.o,tail8.data.o,ov_SC05_003_jr_8015A3C8.o,tail9.data.o,ov_SC05_003_jr_8015AE2C.o,tail10.data.o,ov_SC05_003_jr_8015C32C.o,tail11.data.o,ov_SC05_003_jr_8016AB6C.o,tail12.data.o,ov_SC05_003_jr_801734BC.o,tail13.data.o,ov_SC05_003_jr_80178D40.o,tail14.data.o,ov_SC05_003_jr_8017A4AC.o,tail15.data.o,ov_SC05_003_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_003_jr_8012ACE0.o,tail2.data.o,ov_SC05_003_jr_801380E0.o,tail3.data.o,ov_SC05_003_jr_8013F350.o,tail4.data.o,ov_SC05_003_jr_8013FFD8.o,tail5.data.o,ov_SC05_003_jr_80140608.o,tail6.data.o,ov_SC05_003_jr_8015444C.o,tail7.data.o,ov_SC05_003_jr_80154C24.o,ov_SC05_003_jr_801588CC.o,tail8.data.o,ov_SC05_003_jr_80159C84.o,tail9.data.o,ov_SC05_003_jr_8015A3C8.o,tail10.data.o,ov_SC05_003_jr_8015AE2C.o,tail11.data.o,ov_SC05_003_jr_8015C32C.o,tail12.data.o,ov_SC05_003_jr_8016AB6C.o,tail13.data.o,ov_SC05_003_jr_801734BC.o,tail14.data.o,ov_SC05_003_jr_80178D40.o,tail15.data.o,ov_SC05_003_jr_8017A4AC.o,tail16.data.o,ov_SC05_003_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_003/ov_SC05_003_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_003/ov_SC05_003_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_003/ov_SC05_003_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2748,7 +2748,7 @@ ov_SC05_004_ELF := $(ov_SC05_004_OUT).elf ov_SC05_004_MAPFILE := $(ov_SC05_004_OUT).map ov_SC05_004_LD_SCRIPT := $(ov_SC05_004_OUT).ld ov_SC05_004_SPLAT_YAML := config/splat.ov_SC05_004.yaml -ov_SC05_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_004_jr_8012ACE0.o,tail2.data.o,ov_SC05_004_jr_801380E0.o,tail3.data.o,ov_SC05_004_jr_8013F350.o,tail4.data.o,ov_SC05_004_jr_8015444C.o,tail5.data.o,ov_SC05_004_jr_80154C24.o,ov_SC05_004_jr_801588CC.o,tail6.data.o,ov_SC05_004_jr_80159C84.o,tail7.data.o,ov_SC05_004_jr_8015A3C8.o,tail8.data.o,ov_SC05_004_jr_8015AE2C.o,tail9.data.o,ov_SC05_004_jr_8015C32C.o,tail10.data.o,ov_SC05_004_jr_8016AB6C.o,tail11.data.o,ov_SC05_004_jr_801734BC.o,tail12.data.o,ov_SC05_004_jr_80178D40.o,tail13.data.o,ov_SC05_004_jr_8017A4AC.o,tail14.data.o,ov_SC05_004_jr_8017BEBC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_004_jr_8012ACE0.o,tail2.data.o,ov_SC05_004_jr_801380E0.o,tail3.data.o,ov_SC05_004_jr_8013F350.o,tail4.data.o,ov_SC05_004_jr_80140608.o,tail5.data.o,ov_SC05_004_jr_8015444C.o,tail6.data.o,ov_SC05_004_jr_80154C24.o,ov_SC05_004_jr_801588CC.o,tail7.data.o,ov_SC05_004_jr_80159C84.o,tail8.data.o,ov_SC05_004_jr_8015A3C8.o,tail9.data.o,ov_SC05_004_jr_8015AE2C.o,tail10.data.o,ov_SC05_004_jr_8015C32C.o,tail11.data.o,ov_SC05_004_jr_8016AB6C.o,tail12.data.o,ov_SC05_004_jr_801734BC.o,tail13.data.o,ov_SC05_004_jr_80178D40.o,tail14.data.o,ov_SC05_004_jr_8017A4AC.o,tail15.data.o,ov_SC05_004_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_004/ov_SC05_004_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_004/ov_SC05_004_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_004/ov_SC05_004_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2775,7 +2775,7 @@ ov_SC05_005_ELF := $(ov_SC05_005_OUT).elf ov_SC05_005_MAPFILE := $(ov_SC05_005_OUT).map ov_SC05_005_LD_SCRIPT := $(ov_SC05_005_OUT).ld ov_SC05_005_SPLAT_YAML := config/splat.ov_SC05_005.yaml -ov_SC05_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_005_jr_8012ACE0.o,tail2.data.o,ov_SC05_005_jr_801380E0.o,tail3.data.o,ov_SC05_005_jr_8013F350.o,tail4.data.o,ov_SC05_005_jr_8013FFD8.o,tail5.data.o,ov_SC05_005_jr_8015444C.o,tail6.data.o,ov_SC05_005_jr_80154C24.o,ov_SC05_005_jr_801588CC.o,tail7.data.o,ov_SC05_005_jr_80159C84.o,tail8.data.o,ov_SC05_005_jr_8015A3C8.o,tail9.data.o,ov_SC05_005_jr_8015AE2C.o,tail10.data.o,ov_SC05_005_jr_8015C32C.o,tail11.data.o,ov_SC05_005_jr_8016AB6C.o,tail12.data.o,ov_SC05_005_jr_801734BC.o,tail13.data.o,ov_SC05_005_jr_80178D40.o,tail14.data.o,ov_SC05_005_jr_8017A4AC.o,tail15.data.o,ov_SC05_005_jr_8017D898.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_005_jr_8012ACE0.o,tail2.data.o,ov_SC05_005_jr_801380E0.o,tail3.data.o,ov_SC05_005_jr_8013F350.o,tail4.data.o,ov_SC05_005_jr_8013FFD8.o,tail5.data.o,ov_SC05_005_jr_80140608.o,tail6.data.o,ov_SC05_005_jr_8015444C.o,tail7.data.o,ov_SC05_005_jr_80154C24.o,ov_SC05_005_jr_801588CC.o,tail8.data.o,ov_SC05_005_jr_80159C84.o,tail9.data.o,ov_SC05_005_jr_8015A3C8.o,tail10.data.o,ov_SC05_005_jr_8015AE2C.o,tail11.data.o,ov_SC05_005_jr_8015C32C.o,tail12.data.o,ov_SC05_005_jr_8016AB6C.o,tail13.data.o,ov_SC05_005_jr_801734BC.o,tail14.data.o,ov_SC05_005_jr_80178D40.o,tail15.data.o,ov_SC05_005_jr_8017A4AC.o,tail16.data.o,ov_SC05_005_jr_8017D898.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_005/ov_SC05_005_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_005/ov_SC05_005_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_005/ov_SC05_005_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2802,7 +2802,7 @@ ov_SC05_006_ELF := $(ov_SC05_006_OUT).elf ov_SC05_006_MAPFILE := $(ov_SC05_006_OUT).map ov_SC05_006_LD_SCRIPT := $(ov_SC05_006_OUT).ld ov_SC05_006_SPLAT_YAML := config/splat.ov_SC05_006.yaml -ov_SC05_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_006_jr_8012ACE0.o,tail2.data.o,ov_SC05_006_jr_801380E0.o,tail3.data.o,ov_SC05_006_jr_8013F350.o,tail4.data.o,ov_SC05_006_jr_8013FFD8.o,tail5.data.o,ov_SC05_006_jr_8015444C.o,tail6.data.o,ov_SC05_006_jr_80154C24.o,ov_SC05_006_jr_801588CC.o,tail7.data.o,ov_SC05_006_jr_80159C84.o,tail8.data.o,ov_SC05_006_jr_8015A3C8.o,tail9.data.o,ov_SC05_006_jr_8015AE2C.o,tail10.data.o,ov_SC05_006_jr_8015C32C.o,tail11.data.o,ov_SC05_006_jr_8016AB6C.o,tail12.data.o,ov_SC05_006_jr_801734BC.o,tail13.data.o,ov_SC05_006_jr_80178D40.o,tail14.data.o,ov_SC05_006_jr_8017A4AC.o,tail15.data.o,ov_SC05_006_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_006_jr_8012ACE0.o,tail2.data.o,ov_SC05_006_jr_801380E0.o,tail3.data.o,ov_SC05_006_jr_8013F350.o,tail4.data.o,ov_SC05_006_jr_8013FFD8.o,tail5.data.o,ov_SC05_006_jr_80140608.o,tail6.data.o,ov_SC05_006_jr_8015444C.o,tail7.data.o,ov_SC05_006_jr_80154C24.o,ov_SC05_006_jr_801588CC.o,tail8.data.o,ov_SC05_006_jr_80159C84.o,tail9.data.o,ov_SC05_006_jr_8015A3C8.o,tail10.data.o,ov_SC05_006_jr_8015AE2C.o,tail11.data.o,ov_SC05_006_jr_8015C32C.o,tail12.data.o,ov_SC05_006_jr_8016AB6C.o,tail13.data.o,ov_SC05_006_jr_801734BC.o,tail14.data.o,ov_SC05_006_jr_80178D40.o,tail15.data.o,ov_SC05_006_jr_8017A4AC.o,tail16.data.o,ov_SC05_006_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_006/ov_SC05_006_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_006/ov_SC05_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_006/ov_SC05_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2829,7 +2829,7 @@ ov_SC05_007_ELF := $(ov_SC05_007_OUT).elf ov_SC05_007_MAPFILE := $(ov_SC05_007_OUT).map ov_SC05_007_LD_SCRIPT := $(ov_SC05_007_OUT).ld ov_SC05_007_SPLAT_YAML := config/splat.ov_SC05_007.yaml -ov_SC05_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_007_jr_8012ACE0.o,tail2.data.o,ov_SC05_007_jr_801380E0.o,tail3.data.o,ov_SC05_007_jr_8013F350.o,tail4.data.o,ov_SC05_007_jr_8013FFD8.o,tail5.data.o,ov_SC05_007_jr_8015444C.o,tail6.data.o,ov_SC05_007_jr_80154C24.o,ov_SC05_007_jr_801588CC.o,tail7.data.o,ov_SC05_007_jr_80159C84.o,tail8.data.o,ov_SC05_007_jr_8015A3C8.o,tail9.data.o,ov_SC05_007_jr_8015AE2C.o,tail10.data.o,ov_SC05_007_jr_8015C32C.o,tail11.data.o,ov_SC05_007_jr_8016AB6C.o,tail12.data.o,ov_SC05_007_jr_801734BC.o,tail13.data.o,ov_SC05_007_jr_80178D40.o,tail14.data.o,ov_SC05_007_jr_8017A4AC.o,tail15.data.o,ov_SC05_007_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_007_jr_8012ACE0.o,tail2.data.o,ov_SC05_007_jr_801380E0.o,tail3.data.o,ov_SC05_007_jr_8013F350.o,tail4.data.o,ov_SC05_007_jr_8013FFD8.o,tail5.data.o,ov_SC05_007_jr_80140608.o,tail6.data.o,ov_SC05_007_jr_8015444C.o,tail7.data.o,ov_SC05_007_jr_80154C24.o,ov_SC05_007_jr_801588CC.o,tail8.data.o,ov_SC05_007_jr_80159C84.o,tail9.data.o,ov_SC05_007_jr_8015A3C8.o,tail10.data.o,ov_SC05_007_jr_8015AE2C.o,tail11.data.o,ov_SC05_007_jr_8015C32C.o,tail12.data.o,ov_SC05_007_jr_8016AB6C.o,tail13.data.o,ov_SC05_007_jr_801734BC.o,tail14.data.o,ov_SC05_007_jr_80178D40.o,tail15.data.o,ov_SC05_007_jr_8017A4AC.o,tail16.data.o,ov_SC05_007_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_007/ov_SC05_007_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_007/ov_SC05_007_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_007/ov_SC05_007_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2856,7 +2856,7 @@ ov_SC05_008_ELF := $(ov_SC05_008_OUT).elf ov_SC05_008_MAPFILE := $(ov_SC05_008_OUT).map ov_SC05_008_LD_SCRIPT := $(ov_SC05_008_OUT).ld ov_SC05_008_SPLAT_YAML := config/splat.ov_SC05_008.yaml -ov_SC05_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_008_jr_8012ACE0.o,tail2.data.o,ov_SC05_008_jr_801380E0.o,tail3.data.o,ov_SC05_008_jr_8013F350.o,tail4.data.o,ov_SC05_008_jr_8013FFD8.o,tail5.data.o,ov_SC05_008_jr_8015444C.o,tail6.data.o,ov_SC05_008_jr_80154C24.o,ov_SC05_008_jr_801588CC.o,tail7.data.o,ov_SC05_008_jr_80159C84.o,tail8.data.o,ov_SC05_008_jr_8015A3C8.o,tail9.data.o,ov_SC05_008_jr_8015AE2C.o,tail10.data.o,ov_SC05_008_jr_8015C32C.o,tail11.data.o,ov_SC05_008_jr_8016AB6C.o,tail12.data.o,ov_SC05_008_jr_801734BC.o,tail13.data.o,ov_SC05_008_jr_80178D40.o,tail14.data.o,ov_SC05_008_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_008_jr_8012ACE0.o,tail2.data.o,ov_SC05_008_jr_801380E0.o,tail3.data.o,ov_SC05_008_jr_8013F350.o,tail4.data.o,ov_SC05_008_jr_8013FFD8.o,tail5.data.o,ov_SC05_008_jr_80140608.o,tail6.data.o,ov_SC05_008_jr_8015444C.o,tail7.data.o,ov_SC05_008_jr_80154C24.o,ov_SC05_008_jr_801588CC.o,tail8.data.o,ov_SC05_008_jr_80159C84.o,tail9.data.o,ov_SC05_008_jr_8015A3C8.o,tail10.data.o,ov_SC05_008_jr_8015AE2C.o,tail11.data.o,ov_SC05_008_jr_8015C32C.o,tail12.data.o,ov_SC05_008_jr_8016AB6C.o,tail13.data.o,ov_SC05_008_jr_801734BC.o,tail14.data.o,ov_SC05_008_jr_80178D40.o,tail15.data.o,ov_SC05_008_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_008/ov_SC05_008_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_008/ov_SC05_008_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_008/ov_SC05_008_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2883,7 +2883,7 @@ ov_SC05_009_ELF := $(ov_SC05_009_OUT).elf ov_SC05_009_MAPFILE := $(ov_SC05_009_OUT).map ov_SC05_009_LD_SCRIPT := $(ov_SC05_009_OUT).ld ov_SC05_009_SPLAT_YAML := config/splat.ov_SC05_009.yaml -ov_SC05_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_009_jr_8012ACE0.o,tail2.data.o,ov_SC05_009_jr_801380E0.o,tail3.data.o,ov_SC05_009_jr_8013F350.o,tail4.data.o,ov_SC05_009_jr_8013FFD8.o,tail5.data.o,ov_SC05_009_jr_8015444C.o,tail6.data.o,ov_SC05_009_jr_80154C24.o,ov_SC05_009_jr_801588CC.o,tail7.data.o,ov_SC05_009_jr_80159C84.o,tail8.data.o,ov_SC05_009_jr_8015AE2C.o,tail9.data.o,ov_SC05_009_jr_8015C32C.o,tail10.data.o,ov_SC05_009_jr_8016AB6C.o,tail11.data.o,ov_SC05_009_jr_801734BC.o,tail12.data.o,ov_SC05_009_jr_80178D40.o,tail13.data.o,ov_SC05_009_jr_8017A4AC.o,tail14.data.o,ov_SC05_009_jr_8017BEBC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_009_jr_8012ACE0.o,tail2.data.o,ov_SC05_009_jr_801380E0.o,tail3.data.o,ov_SC05_009_jr_8013F350.o,tail4.data.o,ov_SC05_009_jr_8013FFD8.o,tail5.data.o,ov_SC05_009_jr_80140608.o,tail6.data.o,ov_SC05_009_jr_8015444C.o,tail7.data.o,ov_SC05_009_jr_80154C24.o,ov_SC05_009_jr_801588CC.o,tail8.data.o,ov_SC05_009_jr_80159C84.o,tail9.data.o,ov_SC05_009_jr_8015AE2C.o,tail10.data.o,ov_SC05_009_jr_8015C32C.o,tail11.data.o,ov_SC05_009_jr_8016AB6C.o,tail12.data.o,ov_SC05_009_jr_801734BC.o,tail13.data.o,ov_SC05_009_jr_80178D40.o,tail14.data.o,ov_SC05_009_jr_8017A4AC.o,tail15.data.o,ov_SC05_009_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_009/ov_SC05_009_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_009/ov_SC05_009_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_009/ov_SC05_009_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2910,7 +2910,7 @@ ov_SC05_010_ELF := $(ov_SC05_010_OUT).elf ov_SC05_010_MAPFILE := $(ov_SC05_010_OUT).map ov_SC05_010_LD_SCRIPT := $(ov_SC05_010_OUT).ld ov_SC05_010_SPLAT_YAML := config/splat.ov_SC05_010.yaml -ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_801380E0.o,tail3.data.o,ov_SC05_010_jr_8013F350.o,tail4.data.o,ov_SC05_010_jr_8013FFD8.o,tail5.data.o,ov_SC05_010_jr_8015444C.o,tail6.data.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,tail7.data.o,ov_SC05_010_jr_80159C84.o,tail8.data.o,ov_SC05_010_jr_8015A3C8.o,tail9.data.o,ov_SC05_010_jr_8015AE2C.o,tail10.data.o,ov_SC05_010_jr_8015C32C.o,tail11.data.o,ov_SC05_010_jr_8016AB6C.o,tail12.data.o,ov_SC05_010_jr_801734BC.o,tail13.data.o,ov_SC05_010_jr_80178D40.o,tail14.data.o,ov_SC05_010_jr_8017A4AC.o,tail15.data.o,ov_SC05_010_jr_8017C8D0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_801380E0.o,tail3.data.o,ov_SC05_010_jr_8013F350.o,tail4.data.o,ov_SC05_010_jr_8013FFD8.o,tail5.data.o,ov_SC05_010_jr_80140608.o,tail6.data.o,ov_SC05_010_jr_8015444C.o,tail7.data.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,tail8.data.o,ov_SC05_010_jr_80159C84.o,tail9.data.o,ov_SC05_010_jr_8015A3C8.o,tail10.data.o,ov_SC05_010_jr_8015AE2C.o,tail11.data.o,ov_SC05_010_jr_8015C32C.o,tail12.data.o,ov_SC05_010_jr_8016AB6C.o,tail13.data.o,ov_SC05_010_jr_801734BC.o,tail14.data.o,ov_SC05_010_jr_80178D40.o,tail15.data.o,ov_SC05_010_jr_8017A4AC.o,tail16.data.o,ov_SC05_010_jr_8017C8D0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_010/ov_SC05_010_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_010/ov_SC05_010_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_010/ov_SC05_010_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2937,7 +2937,7 @@ ov_SC05_011_ELF := $(ov_SC05_011_OUT).elf ov_SC05_011_MAPFILE := $(ov_SC05_011_OUT).map ov_SC05_011_LD_SCRIPT := $(ov_SC05_011_OUT).ld ov_SC05_011_SPLAT_YAML := config/splat.ov_SC05_011.yaml -ov_SC05_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_011_jr_8012ACE0.o,tail2.data.o,ov_SC05_011_jr_801380E0.o,tail3.data.o,ov_SC05_011_jr_8013F350.o,tail4.data.o,ov_SC05_011_jr_8013FFD8.o,tail5.data.o,ov_SC05_011_jr_8015444C.o,tail6.data.o,ov_SC05_011_jr_80154C24.o,ov_SC05_011_jr_801588CC.o,tail7.data.o,ov_SC05_011_jr_80159C84.o,tail8.data.o,ov_SC05_011_jr_8015A3C8.o,tail9.data.o,ov_SC05_011_jr_8015AE2C.o,tail10.data.o,ov_SC05_011_jr_8015C32C.o,tail11.data.o,ov_SC05_011_jr_8016AB6C.o,tail12.data.o,ov_SC05_011_jr_801734BC.o,tail13.data.o,ov_SC05_011_jr_80178D40.o,tail14.data.o,ov_SC05_011_jr_8017A4AC.o,tail15.data.o,ov_SC05_011_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_011_jr_8012ACE0.o,tail2.data.o,ov_SC05_011_jr_801380E0.o,tail3.data.o,ov_SC05_011_jr_8013F350.o,tail4.data.o,ov_SC05_011_jr_8013FFD8.o,tail5.data.o,ov_SC05_011_jr_80140608.o,tail6.data.o,ov_SC05_011_jr_8015444C.o,tail7.data.o,ov_SC05_011_jr_80154C24.o,ov_SC05_011_jr_801588CC.o,tail8.data.o,ov_SC05_011_jr_80159C84.o,tail9.data.o,ov_SC05_011_jr_8015A3C8.o,tail10.data.o,ov_SC05_011_jr_8015AE2C.o,tail11.data.o,ov_SC05_011_jr_8015C32C.o,tail12.data.o,ov_SC05_011_jr_8016AB6C.o,tail13.data.o,ov_SC05_011_jr_801734BC.o,tail14.data.o,ov_SC05_011_jr_80178D40.o,tail15.data.o,ov_SC05_011_jr_8017A4AC.o,tail16.data.o,ov_SC05_011_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_011/ov_SC05_011_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_011/ov_SC05_011_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_011/ov_SC05_011_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2964,7 +2964,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_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_801380E0.o,tail3.data.o,ov_SC05_017_jr_8013F350.o,tail4.data.o,ov_SC05_017_jr_8013FFD8.o,tail5.data.o,ov_SC05_017_jr_8015444C.o,tail6.data.o,ov_SC05_017_jr_80154C24.o,ov_SC05_017_jr_801588CC.o,tail7.data.o,ov_SC05_017_jr_80159C84.o,tail8.data.o,ov_SC05_017_jr_8015A3C8.o,tail9.data.o,ov_SC05_017_jr_8015AE2C.o,tail10.data.o,ov_SC05_017_jr_8015C32C.o,tail11.data.o,ov_SC05_017_jr_8016AB6C.o,tail12.data.o,ov_SC05_017_jr_801734BC.o,tail13.data.o,ov_SC05_017_jr_80178D40.o,tail14.data.o,ov_SC05_017_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_801380E0.o,tail3.data.o,ov_SC05_017_jr_8013F350.o,tail4.data.o,ov_SC05_017_jr_8013FFD8.o,tail5.data.o,ov_SC05_017_jr_80140608.o,tail6.data.o,ov_SC05_017_jr_8015444C.o,tail7.data.o,ov_SC05_017_jr_80154C24.o,ov_SC05_017_jr_801588CC.o,tail8.data.o,ov_SC05_017_jr_80159C84.o,tail9.data.o,ov_SC05_017_jr_8015A3C8.o,tail10.data.o,ov_SC05_017_jr_8015AE2C.o,tail11.data.o,ov_SC05_017_jr_8015C32C.o,tail12.data.o,ov_SC05_017_jr_8016AB6C.o,tail13.data.o,ov_SC05_017_jr_801734BC.o,tail14.data.o,ov_SC05_017_jr_80178D40.o,tail15.data.o,ov_SC05_017_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_017/ov_SC05_017_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_017/ov_SC05_017_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_017/ov_SC05_017_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -2991,7 +2991,7 @@ ov_SC05_018_ELF := $(ov_SC05_018_OUT).elf ov_SC05_018_MAPFILE := $(ov_SC05_018_OUT).map ov_SC05_018_LD_SCRIPT := $(ov_SC05_018_OUT).ld ov_SC05_018_SPLAT_YAML := config/splat.ov_SC05_018.yaml -ov_SC05_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_018_jr_8012ACE0.o,tail2.data.o,ov_SC05_018_jr_801380E0.o,tail3.data.o,ov_SC05_018_jr_8013F350.o,tail4.data.o,ov_SC05_018_jr_8013FFD8.o,tail5.data.o,ov_SC05_018_jr_8015444C.o,tail6.data.o,ov_SC05_018_jr_80154C24.o,ov_SC05_018_jr_801588CC.o,tail7.data.o,ov_SC05_018_jr_80159C84.o,tail8.data.o,ov_SC05_018_jr_8015A3C8.o,tail9.data.o,ov_SC05_018_jr_8015AE2C.o,tail10.data.o,ov_SC05_018_jr_8015C32C.o,tail11.data.o,ov_SC05_018_jr_8016AB6C.o,tail12.data.o,ov_SC05_018_jr_801734BC.o,tail13.data.o,ov_SC05_018_jr_80178D40.o,tail14.data.o,ov_SC05_018_jr_8017A4AC.o,tail15.data.o,ov_SC05_018_jr_8017D604.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_018_jr_8012ACE0.o,tail2.data.o,ov_SC05_018_jr_801380E0.o,tail3.data.o,ov_SC05_018_jr_8013F350.o,tail4.data.o,ov_SC05_018_jr_8013FFD8.o,tail5.data.o,ov_SC05_018_jr_80140608.o,tail6.data.o,ov_SC05_018_jr_8015444C.o,tail7.data.o,ov_SC05_018_jr_80154C24.o,ov_SC05_018_jr_801588CC.o,tail8.data.o,ov_SC05_018_jr_80159C84.o,tail9.data.o,ov_SC05_018_jr_8015A3C8.o,tail10.data.o,ov_SC05_018_jr_8015AE2C.o,tail11.data.o,ov_SC05_018_jr_8015C32C.o,tail12.data.o,ov_SC05_018_jr_8016AB6C.o,tail13.data.o,ov_SC05_018_jr_801734BC.o,tail14.data.o,ov_SC05_018_jr_80178D40.o,tail15.data.o,ov_SC05_018_jr_8017A4AC.o,tail16.data.o,ov_SC05_018_jr_8017D604.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_018/ov_SC05_018_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_018/ov_SC05_018_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_018/ov_SC05_018_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3018,7 +3018,7 @@ ov_SC05_019_ELF := $(ov_SC05_019_OUT).elf ov_SC05_019_MAPFILE := $(ov_SC05_019_OUT).map ov_SC05_019_LD_SCRIPT := $(ov_SC05_019_OUT).ld ov_SC05_019_SPLAT_YAML := config/splat.ov_SC05_019.yaml -ov_SC05_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_019_jr_8012ACE0.o,tail2.data.o,ov_SC05_019_jr_801380E0.o,tail3.data.o,ov_SC05_019_jr_8013F350.o,tail4.data.o,ov_SC05_019_jr_8013FFD8.o,tail5.data.o,ov_SC05_019_jr_8015444C.o,tail6.data.o,ov_SC05_019_jr_80154C24.o,ov_SC05_019_jr_801588CC.o,tail7.data.o,ov_SC05_019_jr_80159C84.o,tail8.data.o,ov_SC05_019_jr_8015A3C8.o,tail9.data.o,ov_SC05_019_jr_8015AE2C.o,tail10.data.o,ov_SC05_019_jr_8015C32C.o,tail11.data.o,ov_SC05_019_jr_8016AB6C.o,tail12.data.o,ov_SC05_019_jr_801734BC.o,tail13.data.o,ov_SC05_019_jr_80178D40.o,tail14.data.o,ov_SC05_019_jr_8017A4AC.o,tail15.data.o,ov_SC05_019_jr_8017D5C0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_019_jr_8012ACE0.o,tail2.data.o,ov_SC05_019_jr_801380E0.o,tail3.data.o,ov_SC05_019_jr_8013F350.o,tail4.data.o,ov_SC05_019_jr_8013FFD8.o,tail5.data.o,ov_SC05_019_jr_80140608.o,tail6.data.o,ov_SC05_019_jr_8015444C.o,tail7.data.o,ov_SC05_019_jr_80154C24.o,ov_SC05_019_jr_801588CC.o,tail8.data.o,ov_SC05_019_jr_80159C84.o,tail9.data.o,ov_SC05_019_jr_8015A3C8.o,tail10.data.o,ov_SC05_019_jr_8015AE2C.o,tail11.data.o,ov_SC05_019_jr_8015C32C.o,tail12.data.o,ov_SC05_019_jr_8016AB6C.o,tail13.data.o,ov_SC05_019_jr_801734BC.o,tail14.data.o,ov_SC05_019_jr_80178D40.o,tail15.data.o,ov_SC05_019_jr_8017A4AC.o,tail16.data.o,ov_SC05_019_jr_8017D5C0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_019/ov_SC05_019_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC05_019/ov_SC05_019_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_019/ov_SC05_019_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3045,7 +3045,7 @@ ov_SC06_006_ELF := $(ov_SC06_006_OUT).elf ov_SC06_006_MAPFILE := $(ov_SC06_006_OUT).map ov_SC06_006_LD_SCRIPT := $(ov_SC06_006_OUT).ld ov_SC06_006_SPLAT_YAML := config/splat.ov_SC06_006.yaml -ov_SC06_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_006_jr_8012ACE0.o,tail2.data.o,ov_SC06_006_jr_801380E0.o,tail3.data.o,ov_SC06_006_jr_8013F350.o,tail4.data.o,ov_SC06_006_jr_8013FFD8.o,tail5.data.o,ov_SC06_006_jr_8015444C.o,tail6.data.o,ov_SC06_006_jr_80154C24.o,ov_SC06_006_jr_801588CC.o,tail7.data.o,ov_SC06_006_jr_80159C84.o,tail8.data.o,ov_SC06_006_jr_8015A3C8.o,tail9.data.o,ov_SC06_006_jr_8015AE2C.o,tail10.data.o,ov_SC06_006_jr_8015C32C.o,tail11.data.o,ov_SC06_006_jr_8016AB6C.o,tail12.data.o,ov_SC06_006_jr_801734BC.o,tail13.data.o,ov_SC06_006_jr_80178D40.o,tail14.data.o,ov_SC06_006_jr_8017A4AC.o,tail15.data.o,ov_SC06_006_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_006_jr_8012ACE0.o,tail2.data.o,ov_SC06_006_jr_801380E0.o,tail3.data.o,ov_SC06_006_jr_8013F350.o,tail4.data.o,ov_SC06_006_jr_8013FFD8.o,tail5.data.o,ov_SC06_006_jr_80140608.o,tail6.data.o,ov_SC06_006_jr_8015444C.o,tail7.data.o,ov_SC06_006_jr_80154C24.o,ov_SC06_006_jr_801588CC.o,tail8.data.o,ov_SC06_006_jr_80159C84.o,tail9.data.o,ov_SC06_006_jr_8015A3C8.o,tail10.data.o,ov_SC06_006_jr_8015AE2C.o,tail11.data.o,ov_SC06_006_jr_8015C32C.o,tail12.data.o,ov_SC06_006_jr_8016AB6C.o,tail13.data.o,ov_SC06_006_jr_801734BC.o,tail14.data.o,ov_SC06_006_jr_80178D40.o,tail15.data.o,ov_SC06_006_jr_8017A4AC.o,tail16.data.o,ov_SC06_006_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_006/ov_SC06_006_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_006/ov_SC06_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_006/ov_SC06_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3072,7 +3072,7 @@ ov_SC06_008_ELF := $(ov_SC06_008_OUT).elf ov_SC06_008_MAPFILE := $(ov_SC06_008_OUT).map ov_SC06_008_LD_SCRIPT := $(ov_SC06_008_OUT).ld ov_SC06_008_SPLAT_YAML := config/splat.ov_SC06_008.yaml -ov_SC06_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_008_jr_8012ACE0.o,tail2.data.o,ov_SC06_008_jr_801380E0.o,tail3.data.o,ov_SC06_008_jr_8013F350.o,tail4.data.o,ov_SC06_008_jr_8013FFD8.o,tail5.data.o,ov_SC06_008_jr_8015444C.o,tail6.data.o,ov_SC06_008_jr_80154C24.o,ov_SC06_008_jr_801588CC.o,tail7.data.o,ov_SC06_008_jr_80159C84.o,tail8.data.o,ov_SC06_008_jr_8015A3C8.o,tail9.data.o,ov_SC06_008_jr_8015AE2C.o,tail10.data.o,ov_SC06_008_jr_8015C32C.o,tail11.data.o,ov_SC06_008_jr_8016AB6C.o,tail12.data.o,ov_SC06_008_jr_801734BC.o,tail13.data.o,ov_SC06_008_jr_80178D40.o,tail14.data.o,ov_SC06_008_jr_8017A4AC.o,tail15.data.o,ov_SC06_008_jr_8017C294.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_008_jr_8012ACE0.o,tail2.data.o,ov_SC06_008_jr_801380E0.o,tail3.data.o,ov_SC06_008_jr_8013F350.o,tail4.data.o,ov_SC06_008_jr_8013FFD8.o,tail5.data.o,ov_SC06_008_jr_80140608.o,tail6.data.o,ov_SC06_008_jr_8015444C.o,tail7.data.o,ov_SC06_008_jr_80154C24.o,ov_SC06_008_jr_801588CC.o,tail8.data.o,ov_SC06_008_jr_80159C84.o,tail9.data.o,ov_SC06_008_jr_8015A3C8.o,tail10.data.o,ov_SC06_008_jr_8015AE2C.o,tail11.data.o,ov_SC06_008_jr_8015C32C.o,tail12.data.o,ov_SC06_008_jr_8016AB6C.o,tail13.data.o,ov_SC06_008_jr_801734BC.o,tail14.data.o,ov_SC06_008_jr_80178D40.o,tail15.data.o,ov_SC06_008_jr_8017A4AC.o,tail16.data.o,ov_SC06_008_jr_8017C294.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_008/ov_SC06_008_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_008/ov_SC06_008_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_008/ov_SC06_008_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3099,7 +3099,7 @@ ov_SC06_010_ELF := $(ov_SC06_010_OUT).elf ov_SC06_010_MAPFILE := $(ov_SC06_010_OUT).map ov_SC06_010_LD_SCRIPT := $(ov_SC06_010_OUT).ld ov_SC06_010_SPLAT_YAML := config/splat.ov_SC06_010.yaml -ov_SC06_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_010_jr_8012ACE0.o,tail2.data.o,ov_SC06_010_jr_801380E0.o,tail3.data.o,ov_SC06_010_jr_8013F350.o,tail4.data.o,ov_SC06_010_jr_8015444C.o,tail5.data.o,ov_SC06_010_jr_80154C24.o,ov_SC06_010_jr_801588CC.o,tail6.data.o,ov_SC06_010_jr_80159C84.o,tail7.data.o,ov_SC06_010_jr_8015A3C8.o,tail8.data.o,ov_SC06_010_jr_8015AE2C.o,tail9.data.o,ov_SC06_010_jr_8015C32C.o,tail10.data.o,ov_SC06_010_jr_8016AB6C.o,tail11.data.o,ov_SC06_010_jr_801734BC.o,tail12.data.o,ov_SC06_010_jr_80178D40.o,tail13.data.o,ov_SC06_010_jr_8017A4AC.o,tail14.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_010_jr_8012ACE0.o,tail2.data.o,ov_SC06_010_jr_801380E0.o,tail3.data.o,ov_SC06_010_jr_8013F350.o,tail4.data.o,ov_SC06_010_jr_80140608.o,tail5.data.o,ov_SC06_010_jr_8015444C.o,tail6.data.o,ov_SC06_010_jr_80154C24.o,ov_SC06_010_jr_801588CC.o,tail7.data.o,ov_SC06_010_jr_80159C84.o,tail8.data.o,ov_SC06_010_jr_8015A3C8.o,tail9.data.o,ov_SC06_010_jr_8015AE2C.o,tail10.data.o,ov_SC06_010_jr_8015C32C.o,tail11.data.o,ov_SC06_010_jr_8016AB6C.o,tail12.data.o,ov_SC06_010_jr_801734BC.o,tail13.data.o,ov_SC06_010_jr_80178D40.o,tail14.data.o,ov_SC06_010_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_010/ov_SC06_010_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_010/ov_SC06_010_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_010/ov_SC06_010_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3126,7 +3126,7 @@ ov_SC06_011_ELF := $(ov_SC06_011_OUT).elf ov_SC06_011_MAPFILE := $(ov_SC06_011_OUT).map ov_SC06_011_LD_SCRIPT := $(ov_SC06_011_OUT).ld ov_SC06_011_SPLAT_YAML := config/splat.ov_SC06_011.yaml -ov_SC06_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_011_jr_8012ACE0.o,tail2.data.o,ov_SC06_011_jr_801380E0.o,tail3.data.o,ov_SC06_011_jr_8013F350.o,tail4.data.o,ov_SC06_011_jr_8013FFD8.o,tail5.data.o,ov_SC06_011_jr_8015444C.o,tail6.data.o,ov_SC06_011_jr_80154C24.o,ov_SC06_011_jr_801588CC.o,tail7.data.o,ov_SC06_011_jr_80159C84.o,tail8.data.o,ov_SC06_011_jr_8015A3C8.o,tail9.data.o,ov_SC06_011_jr_8015AE2C.o,tail10.data.o,ov_SC06_011_jr_8015C32C.o,tail11.data.o,ov_SC06_011_jr_8016AB6C.o,tail12.data.o,ov_SC06_011_jr_801734BC.o,tail13.data.o,ov_SC06_011_jr_80178D40.o,tail14.data.o,ov_SC06_011_jr_8017A4AC.o,tail15.data.o,ov_SC06_011_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_011_jr_8012ACE0.o,tail2.data.o,ov_SC06_011_jr_801380E0.o,tail3.data.o,ov_SC06_011_jr_8013F350.o,tail4.data.o,ov_SC06_011_jr_8013FFD8.o,tail5.data.o,ov_SC06_011_jr_80140608.o,tail6.data.o,ov_SC06_011_jr_8015444C.o,tail7.data.o,ov_SC06_011_jr_80154C24.o,ov_SC06_011_jr_801588CC.o,tail8.data.o,ov_SC06_011_jr_80159C84.o,tail9.data.o,ov_SC06_011_jr_8015A3C8.o,tail10.data.o,ov_SC06_011_jr_8015AE2C.o,tail11.data.o,ov_SC06_011_jr_8015C32C.o,tail12.data.o,ov_SC06_011_jr_8016AB6C.o,tail13.data.o,ov_SC06_011_jr_801734BC.o,tail14.data.o,ov_SC06_011_jr_80178D40.o,tail15.data.o,ov_SC06_011_jr_8017A4AC.o,tail16.data.o,ov_SC06_011_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_011/ov_SC06_011_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_011/ov_SC06_011_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_011/ov_SC06_011_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3153,7 +3153,7 @@ ov_SC06_013_ELF := $(ov_SC06_013_OUT).elf ov_SC06_013_MAPFILE := $(ov_SC06_013_OUT).map ov_SC06_013_LD_SCRIPT := $(ov_SC06_013_OUT).ld ov_SC06_013_SPLAT_YAML := config/splat.ov_SC06_013.yaml -ov_SC06_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_013_jr_8012ACE0.o,tail2.data.o,ov_SC06_013_jr_801380E0.o,tail3.data.o,ov_SC06_013_jr_8013F350.o,tail4.data.o,ov_SC06_013_jr_8013FFD8.o,tail5.data.o,ov_SC06_013_jr_8015444C.o,tail6.data.o,ov_SC06_013_jr_80154C24.o,ov_SC06_013_jr_801588CC.o,tail7.data.o,ov_SC06_013_jr_80159C84.o,tail8.data.o,ov_SC06_013_jr_8015A3C8.o,tail9.data.o,ov_SC06_013_jr_8015AE2C.o,tail10.data.o,ov_SC06_013_jr_8015C32C.o,tail11.data.o,ov_SC06_013_jr_8016AB6C.o,tail12.data.o,ov_SC06_013_jr_801734BC.o,tail13.data.o,ov_SC06_013_jr_80178D40.o,tail14.data.o,ov_SC06_013_jr_8017A4AC.o,tail15.data.o,ov_SC06_013_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_013_jr_8012ACE0.o,tail2.data.o,ov_SC06_013_jr_801380E0.o,tail3.data.o,ov_SC06_013_jr_8013F350.o,tail4.data.o,ov_SC06_013_jr_8013FFD8.o,tail5.data.o,ov_SC06_013_jr_80140608.o,tail6.data.o,ov_SC06_013_jr_8015444C.o,tail7.data.o,ov_SC06_013_jr_80154C24.o,ov_SC06_013_jr_801588CC.o,tail8.data.o,ov_SC06_013_jr_80159C84.o,tail9.data.o,ov_SC06_013_jr_8015A3C8.o,tail10.data.o,ov_SC06_013_jr_8015AE2C.o,tail11.data.o,ov_SC06_013_jr_8015C32C.o,tail12.data.o,ov_SC06_013_jr_8016AB6C.o,tail13.data.o,ov_SC06_013_jr_801734BC.o,tail14.data.o,ov_SC06_013_jr_80178D40.o,tail15.data.o,ov_SC06_013_jr_8017A4AC.o,tail16.data.o,ov_SC06_013_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_013/ov_SC06_013_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_013/ov_SC06_013_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_013/ov_SC06_013_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3180,7 +3180,7 @@ ov_SC06_014_ELF := $(ov_SC06_014_OUT).elf ov_SC06_014_MAPFILE := $(ov_SC06_014_OUT).map ov_SC06_014_LD_SCRIPT := $(ov_SC06_014_OUT).ld ov_SC06_014_SPLAT_YAML := config/splat.ov_SC06_014.yaml -ov_SC06_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_014_jr_8012ACE0.o,tail2.data.o,ov_SC06_014_jr_801380E0.o,tail3.data.o,ov_SC06_014_jr_8013F350.o,tail4.data.o,ov_SC06_014_jr_8013FFD8.o,tail5.data.o,ov_SC06_014_jr_8015444C.o,tail6.data.o,ov_SC06_014_jr_80154C24.o,ov_SC06_014_jr_801588CC.o,tail7.data.o,ov_SC06_014_jr_80159C84.o,tail8.data.o,ov_SC06_014_jr_8015A3C8.o,tail9.data.o,ov_SC06_014_jr_8015AE2C.o,tail10.data.o,ov_SC06_014_jr_8015C32C.o,tail11.data.o,ov_SC06_014_jr_8016AB6C.o,tail12.data.o,ov_SC06_014_jr_801734BC.o,tail13.data.o,ov_SC06_014_jr_80178D40.o,tail14.data.o,ov_SC06_014_jr_8017A4AC.o,tail15.data.o,ov_SC06_014_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_014_jr_8012ACE0.o,tail2.data.o,ov_SC06_014_jr_801380E0.o,tail3.data.o,ov_SC06_014_jr_8013F350.o,tail4.data.o,ov_SC06_014_jr_8013FFD8.o,tail5.data.o,ov_SC06_014_jr_80140608.o,tail6.data.o,ov_SC06_014_jr_8015444C.o,tail7.data.o,ov_SC06_014_jr_80154C24.o,ov_SC06_014_jr_801588CC.o,tail8.data.o,ov_SC06_014_jr_80159C84.o,tail9.data.o,ov_SC06_014_jr_8015A3C8.o,tail10.data.o,ov_SC06_014_jr_8015AE2C.o,tail11.data.o,ov_SC06_014_jr_8015C32C.o,tail12.data.o,ov_SC06_014_jr_8016AB6C.o,tail13.data.o,ov_SC06_014_jr_801734BC.o,tail14.data.o,ov_SC06_014_jr_80178D40.o,tail15.data.o,ov_SC06_014_jr_8017A4AC.o,tail16.data.o,ov_SC06_014_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_014/ov_SC06_014_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_014/ov_SC06_014_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_014/ov_SC06_014_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3207,7 +3207,7 @@ ov_SC06_015_ELF := $(ov_SC06_015_OUT).elf ov_SC06_015_MAPFILE := $(ov_SC06_015_OUT).map ov_SC06_015_LD_SCRIPT := $(ov_SC06_015_OUT).ld ov_SC06_015_SPLAT_YAML := config/splat.ov_SC06_015.yaml -ov_SC06_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_015_jr_8012ACE0.o,tail2.data.o,ov_SC06_015_jr_801380E0.o,tail3.data.o,ov_SC06_015_jr_8013F350.o,tail4.data.o,ov_SC06_015_jr_8013FFD8.o,tail5.data.o,ov_SC06_015_jr_8015444C.o,tail6.data.o,ov_SC06_015_jr_80154C24.o,ov_SC06_015_jr_801588CC.o,tail7.data.o,ov_SC06_015_jr_80159C84.o,tail8.data.o,ov_SC06_015_jr_8015A3C8.o,tail9.data.o,ov_SC06_015_jr_8015AE2C.o,tail10.data.o,ov_SC06_015_jr_8015C32C.o,tail11.data.o,ov_SC06_015_jr_8016AB6C.o,tail12.data.o,ov_SC06_015_jr_801734BC.o,tail13.data.o,ov_SC06_015_jr_80178D40.o,tail14.data.o,ov_SC06_015_jr_8017A4AC.o,tail15.data.o,ov_SC06_015_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_015_jr_8012ACE0.o,tail2.data.o,ov_SC06_015_jr_801380E0.o,tail3.data.o,ov_SC06_015_jr_8013F350.o,tail4.data.o,ov_SC06_015_jr_8013FFD8.o,tail5.data.o,ov_SC06_015_jr_80140608.o,tail6.data.o,ov_SC06_015_jr_8015444C.o,tail7.data.o,ov_SC06_015_jr_80154C24.o,ov_SC06_015_jr_801588CC.o,tail8.data.o,ov_SC06_015_jr_80159C84.o,tail9.data.o,ov_SC06_015_jr_8015A3C8.o,tail10.data.o,ov_SC06_015_jr_8015AE2C.o,tail11.data.o,ov_SC06_015_jr_8015C32C.o,tail12.data.o,ov_SC06_015_jr_8016AB6C.o,tail13.data.o,ov_SC06_015_jr_801734BC.o,tail14.data.o,ov_SC06_015_jr_80178D40.o,tail15.data.o,ov_SC06_015_jr_8017A4AC.o,tail16.data.o,ov_SC06_015_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_015/ov_SC06_015_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_015/ov_SC06_015_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_015/ov_SC06_015_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3234,7 +3234,7 @@ ov_SC06_016_ELF := $(ov_SC06_016_OUT).elf ov_SC06_016_MAPFILE := $(ov_SC06_016_OUT).map ov_SC06_016_LD_SCRIPT := $(ov_SC06_016_OUT).ld ov_SC06_016_SPLAT_YAML := config/splat.ov_SC06_016.yaml -ov_SC06_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_016_jr_8012ACE0.o,tail2.data.o,ov_SC06_016_jr_801380E0.o,tail3.data.o,ov_SC06_016_jr_8013F350.o,tail4.data.o,ov_SC06_016_jr_8013FFD8.o,tail5.data.o,ov_SC06_016_jr_8015444C.o,tail6.data.o,ov_SC06_016_jr_80154C24.o,ov_SC06_016_jr_801588CC.o,tail7.data.o,ov_SC06_016_jr_80159C84.o,tail8.data.o,ov_SC06_016_jr_8015A3C8.o,tail9.data.o,ov_SC06_016_jr_8015AE2C.o,tail10.data.o,ov_SC06_016_jr_8015C32C.o,tail11.data.o,ov_SC06_016_jr_8016AB6C.o,tail12.data.o,ov_SC06_016_jr_801734BC.o,tail13.data.o,ov_SC06_016_jr_80178D40.o,tail14.data.o,ov_SC06_016_jr_8017A4AC.o,tail15.data.o,ov_SC06_016_jr_8017C8D0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_016_jr_8012ACE0.o,tail2.data.o,ov_SC06_016_jr_801380E0.o,tail3.data.o,ov_SC06_016_jr_8013F350.o,tail4.data.o,ov_SC06_016_jr_8013FFD8.o,tail5.data.o,ov_SC06_016_jr_80140608.o,tail6.data.o,ov_SC06_016_jr_8015444C.o,tail7.data.o,ov_SC06_016_jr_80154C24.o,ov_SC06_016_jr_801588CC.o,tail8.data.o,ov_SC06_016_jr_80159C84.o,tail9.data.o,ov_SC06_016_jr_8015A3C8.o,tail10.data.o,ov_SC06_016_jr_8015AE2C.o,tail11.data.o,ov_SC06_016_jr_8015C32C.o,tail12.data.o,ov_SC06_016_jr_8016AB6C.o,tail13.data.o,ov_SC06_016_jr_801734BC.o,tail14.data.o,ov_SC06_016_jr_80178D40.o,tail15.data.o,ov_SC06_016_jr_8017A4AC.o,tail16.data.o,ov_SC06_016_jr_8017C8D0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_016/ov_SC06_016_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_016/ov_SC06_016_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_016/ov_SC06_016_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3261,7 +3261,7 @@ ov_SC06_018_ELF := $(ov_SC06_018_OUT).elf ov_SC06_018_MAPFILE := $(ov_SC06_018_OUT).map ov_SC06_018_LD_SCRIPT := $(ov_SC06_018_OUT).ld ov_SC06_018_SPLAT_YAML := config/splat.ov_SC06_018.yaml -ov_SC06_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_018_jr_8012ACE0.o,tail2.data.o,ov_SC06_018_jr_801380E0.o,tail3.data.o,ov_SC06_018_jr_8013F350.o,tail4.data.o,ov_SC06_018_jr_8013FFD8.o,tail5.data.o,ov_SC06_018_jr_8015444C.o,tail6.data.o,ov_SC06_018_jr_80154C24.o,ov_SC06_018_jr_801588CC.o,tail7.data.o,ov_SC06_018_jr_80159C84.o,tail8.data.o,ov_SC06_018_jr_8015A3C8.o,tail9.data.o,ov_SC06_018_jr_8015AE2C.o,tail10.data.o,ov_SC06_018_jr_8015C32C.o,tail11.data.o,ov_SC06_018_jr_8016AB6C.o,tail12.data.o,ov_SC06_018_jr_801734BC.o,tail13.data.o,ov_SC06_018_jr_80178D40.o,tail14.data.o,ov_SC06_018_jr_8017A4AC.o,tail15.data.o,ov_SC06_018_jr_8017C24C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_018_jr_8012ACE0.o,tail2.data.o,ov_SC06_018_jr_801380E0.o,tail3.data.o,ov_SC06_018_jr_8013F350.o,tail4.data.o,ov_SC06_018_jr_8013FFD8.o,tail5.data.o,ov_SC06_018_jr_80140608.o,tail6.data.o,ov_SC06_018_jr_8015444C.o,tail7.data.o,ov_SC06_018_jr_80154C24.o,ov_SC06_018_jr_801588CC.o,tail8.data.o,ov_SC06_018_jr_80159C84.o,tail9.data.o,ov_SC06_018_jr_8015A3C8.o,tail10.data.o,ov_SC06_018_jr_8015AE2C.o,tail11.data.o,ov_SC06_018_jr_8015C32C.o,tail12.data.o,ov_SC06_018_jr_8016AB6C.o,tail13.data.o,ov_SC06_018_jr_801734BC.o,tail14.data.o,ov_SC06_018_jr_80178D40.o,tail15.data.o,ov_SC06_018_jr_8017A4AC.o,tail16.data.o,ov_SC06_018_jr_8017C24C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_018/ov_SC06_018_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_018/ov_SC06_018_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_018/ov_SC06_018_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3288,7 +3288,7 @@ ov_SC06_020_ELF := $(ov_SC06_020_OUT).elf ov_SC06_020_MAPFILE := $(ov_SC06_020_OUT).map ov_SC06_020_LD_SCRIPT := $(ov_SC06_020_OUT).ld ov_SC06_020_SPLAT_YAML := config/splat.ov_SC06_020.yaml -ov_SC06_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_020_jr_8012ACE0.o,tail2.data.o,ov_SC06_020_jr_801380E0.o,tail3.data.o,ov_SC06_020_jr_8013F350.o,tail4.data.o,ov_SC06_020_jr_8013FFD8.o,tail5.data.o,ov_SC06_020_jr_8015444C.o,tail6.data.o,ov_SC06_020_jr_80154C24.o,ov_SC06_020_jr_801588CC.o,tail7.data.o,ov_SC06_020_jr_80159C84.o,tail8.data.o,ov_SC06_020_jr_8015A3C8.o,tail9.data.o,ov_SC06_020_jr_8015AE2C.o,tail10.data.o,ov_SC06_020_jr_8015C32C.o,tail11.data.o,ov_SC06_020_jr_8016AB6C.o,tail12.data.o,ov_SC06_020_jr_801734BC.o,tail13.data.o,ov_SC06_020_jr_80178D40.o,tail14.data.o,ov_SC06_020_jr_8017A4AC.o,tail15.data.o,ov_SC06_020_jr_8017C24C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_020_jr_8012ACE0.o,tail2.data.o,ov_SC06_020_jr_801380E0.o,tail3.data.o,ov_SC06_020_jr_8013F350.o,tail4.data.o,ov_SC06_020_jr_8013FFD8.o,tail5.data.o,ov_SC06_020_jr_80140608.o,tail6.data.o,ov_SC06_020_jr_8015444C.o,tail7.data.o,ov_SC06_020_jr_80154C24.o,ov_SC06_020_jr_801588CC.o,tail8.data.o,ov_SC06_020_jr_80159C84.o,tail9.data.o,ov_SC06_020_jr_8015A3C8.o,tail10.data.o,ov_SC06_020_jr_8015AE2C.o,tail11.data.o,ov_SC06_020_jr_8015C32C.o,tail12.data.o,ov_SC06_020_jr_8016AB6C.o,tail13.data.o,ov_SC06_020_jr_801734BC.o,tail14.data.o,ov_SC06_020_jr_80178D40.o,tail15.data.o,ov_SC06_020_jr_8017A4AC.o,tail16.data.o,ov_SC06_020_jr_8017C24C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_020/ov_SC06_020_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_020/ov_SC06_020_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_020/ov_SC06_020_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3315,7 +3315,7 @@ ov_SC06_022_ELF := $(ov_SC06_022_OUT).elf ov_SC06_022_MAPFILE := $(ov_SC06_022_OUT).map ov_SC06_022_LD_SCRIPT := $(ov_SC06_022_OUT).ld ov_SC06_022_SPLAT_YAML := config/splat.ov_SC06_022.yaml -ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_801380E0.o,tail3.data.o,ov_SC06_022_jr_8013F350.o,tail4.data.o,ov_SC06_022_jr_8013FFD8.o,tail5.data.o,ov_SC06_022_jr_8015444C.o,tail6.data.o,ov_SC06_022_jr_80154C24.o,ov_SC06_022_jr_801588CC.o,tail7.data.o,ov_SC06_022_jr_80159C84.o,tail8.data.o,ov_SC06_022_jr_8015A3C8.o,tail9.data.o,ov_SC06_022_jr_8015AE2C.o,tail10.data.o,ov_SC06_022_jr_8015C32C.o,tail11.data.o,ov_SC06_022_jr_8016AB6C.o,tail12.data.o,ov_SC06_022_jr_801734BC.o,tail13.data.o,ov_SC06_022_jr_80178D40.o,tail14.data.o,ov_SC06_022_jr_8017A4AC.o,tail15.data.o,ov_SC06_022_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_801380E0.o,tail3.data.o,ov_SC06_022_jr_8013F350.o,tail4.data.o,ov_SC06_022_jr_8013FFD8.o,tail5.data.o,ov_SC06_022_jr_80140608.o,tail6.data.o,ov_SC06_022_jr_8015444C.o,tail7.data.o,ov_SC06_022_jr_80154C24.o,ov_SC06_022_jr_801588CC.o,tail8.data.o,ov_SC06_022_jr_80159C84.o,tail9.data.o,ov_SC06_022_jr_8015A3C8.o,tail10.data.o,ov_SC06_022_jr_8015AE2C.o,tail11.data.o,ov_SC06_022_jr_8015C32C.o,tail12.data.o,ov_SC06_022_jr_8016AB6C.o,tail13.data.o,ov_SC06_022_jr_801734BC.o,tail14.data.o,ov_SC06_022_jr_80178D40.o,tail15.data.o,ov_SC06_022_jr_8017A4AC.o,tail16.data.o,ov_SC06_022_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_022/ov_SC06_022_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_022/ov_SC06_022_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_022/ov_SC06_022_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3342,7 +3342,7 @@ ov_SC06_024_ELF := $(ov_SC06_024_OUT).elf ov_SC06_024_MAPFILE := $(ov_SC06_024_OUT).map ov_SC06_024_LD_SCRIPT := $(ov_SC06_024_OUT).ld ov_SC06_024_SPLAT_YAML := config/splat.ov_SC06_024.yaml -ov_SC06_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_024_jr_8012ACE0.o,tail2.data.o,ov_SC06_024_jr_801380E0.o,tail3.data.o,ov_SC06_024_jr_8013F350.o,tail4.data.o,ov_SC06_024_jr_8013FFD8.o,tail5.data.o,ov_SC06_024_jr_8015444C.o,tail6.data.o,ov_SC06_024_jr_80154C24.o,ov_SC06_024_jr_801588CC.o,tail7.data.o,ov_SC06_024_jr_80159C84.o,tail8.data.o,ov_SC06_024_jr_8015A3C8.o,tail9.data.o,ov_SC06_024_jr_8015AE2C.o,tail10.data.o,ov_SC06_024_jr_8015C32C.o,tail11.data.o,ov_SC06_024_jr_8016AB6C.o,tail12.data.o,ov_SC06_024_jr_801734BC.o,tail13.data.o,ov_SC06_024_jr_80178D40.o,tail14.data.o,ov_SC06_024_jr_8017A4AC.o,tail15.data.o,ov_SC06_024_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_024_jr_8012ACE0.o,tail2.data.o,ov_SC06_024_jr_801380E0.o,tail3.data.o,ov_SC06_024_jr_8013F350.o,tail4.data.o,ov_SC06_024_jr_8013FFD8.o,tail5.data.o,ov_SC06_024_jr_80140608.o,tail6.data.o,ov_SC06_024_jr_8015444C.o,tail7.data.o,ov_SC06_024_jr_80154C24.o,ov_SC06_024_jr_801588CC.o,tail8.data.o,ov_SC06_024_jr_80159C84.o,tail9.data.o,ov_SC06_024_jr_8015A3C8.o,tail10.data.o,ov_SC06_024_jr_8015AE2C.o,tail11.data.o,ov_SC06_024_jr_8015C32C.o,tail12.data.o,ov_SC06_024_jr_8016AB6C.o,tail13.data.o,ov_SC06_024_jr_801734BC.o,tail14.data.o,ov_SC06_024_jr_80178D40.o,tail15.data.o,ov_SC06_024_jr_8017A4AC.o,tail16.data.o,ov_SC06_024_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_024/ov_SC06_024_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_024/ov_SC06_024_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_024/ov_SC06_024_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3369,7 +3369,7 @@ ov_SC06_025_ELF := $(ov_SC06_025_OUT).elf ov_SC06_025_MAPFILE := $(ov_SC06_025_OUT).map ov_SC06_025_LD_SCRIPT := $(ov_SC06_025_OUT).ld ov_SC06_025_SPLAT_YAML := config/splat.ov_SC06_025.yaml -ov_SC06_025_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_025_jr_8012ACE0.o,tail2.data.o,ov_SC06_025_jr_801380E0.o,tail3.data.o,ov_SC06_025_jr_8013F350.o,tail4.data.o,ov_SC06_025_jr_8013FFD8.o,tail5.data.o,ov_SC06_025_jr_8015444C.o,tail6.data.o,ov_SC06_025_jr_80154C24.o,ov_SC06_025_jr_801588CC.o,tail7.data.o,ov_SC06_025_jr_80159C84.o,tail8.data.o,ov_SC06_025_jr_8015A3C8.o,tail9.data.o,ov_SC06_025_jr_8015AE2C.o,tail10.data.o,ov_SC06_025_jr_8015C32C.o,tail11.data.o,ov_SC06_025_jr_8016AB6C.o,tail12.data.o,ov_SC06_025_jr_801734BC.o,tail13.data.o,ov_SC06_025_jr_80178D40.o,tail14.data.o,ov_SC06_025_jr_8017A4AC.o,tail15.data.o,ov_SC06_025_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_025_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_025_jr_8012ACE0.o,tail2.data.o,ov_SC06_025_jr_801380E0.o,tail3.data.o,ov_SC06_025_jr_8013F350.o,tail4.data.o,ov_SC06_025_jr_8013FFD8.o,tail5.data.o,ov_SC06_025_jr_80140608.o,tail6.data.o,ov_SC06_025_jr_8015444C.o,tail7.data.o,ov_SC06_025_jr_80154C24.o,ov_SC06_025_jr_801588CC.o,tail8.data.o,ov_SC06_025_jr_80159C84.o,tail9.data.o,ov_SC06_025_jr_8015A3C8.o,tail10.data.o,ov_SC06_025_jr_8015AE2C.o,tail11.data.o,ov_SC06_025_jr_8015C32C.o,tail12.data.o,ov_SC06_025_jr_8016AB6C.o,tail13.data.o,ov_SC06_025_jr_801734BC.o,tail14.data.o,ov_SC06_025_jr_80178D40.o,tail15.data.o,ov_SC06_025_jr_8017A4AC.o,tail16.data.o,ov_SC06_025_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_025/ov_SC06_025_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_025/ov_SC06_025_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_025/ov_SC06_025_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3396,7 +3396,7 @@ ov_SC06_027_ELF := $(ov_SC06_027_OUT).elf ov_SC06_027_MAPFILE := $(ov_SC06_027_OUT).map ov_SC06_027_LD_SCRIPT := $(ov_SC06_027_OUT).ld ov_SC06_027_SPLAT_YAML := config/splat.ov_SC06_027.yaml -ov_SC06_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_027_jr_8012ACE0.o,tail2.data.o,ov_SC06_027_jr_801380E0.o,tail3.data.o,ov_SC06_027_jr_8013F350.o,tail4.data.o,ov_SC06_027_jr_8013FFD8.o,tail5.data.o,ov_SC06_027_jr_8015444C.o,tail6.data.o,ov_SC06_027_jr_80154C24.o,ov_SC06_027_jr_801588CC.o,tail7.data.o,ov_SC06_027_jr_80159C84.o,tail8.data.o,ov_SC06_027_jr_8015A3C8.o,tail9.data.o,ov_SC06_027_jr_8015AE2C.o,tail10.data.o,ov_SC06_027_jr_8015C32C.o,tail11.data.o,ov_SC06_027_jr_8016AB6C.o,tail12.data.o,ov_SC06_027_jr_801734BC.o,tail13.data.o,ov_SC06_027_jr_80178D40.o,tail14.data.o,ov_SC06_027_jr_8017A4AC.o,tail15.data.o,ov_SC06_027_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_027_jr_8012ACE0.o,tail2.data.o,ov_SC06_027_jr_801380E0.o,tail3.data.o,ov_SC06_027_jr_8013F350.o,tail4.data.o,ov_SC06_027_jr_8013FFD8.o,tail5.data.o,ov_SC06_027_jr_80140608.o,tail6.data.o,ov_SC06_027_jr_8015444C.o,tail7.data.o,ov_SC06_027_jr_80154C24.o,ov_SC06_027_jr_801588CC.o,tail8.data.o,ov_SC06_027_jr_80159C84.o,tail9.data.o,ov_SC06_027_jr_8015A3C8.o,tail10.data.o,ov_SC06_027_jr_8015AE2C.o,tail11.data.o,ov_SC06_027_jr_8015C32C.o,tail12.data.o,ov_SC06_027_jr_8016AB6C.o,tail13.data.o,ov_SC06_027_jr_801734BC.o,tail14.data.o,ov_SC06_027_jr_80178D40.o,tail15.data.o,ov_SC06_027_jr_8017A4AC.o,tail16.data.o,ov_SC06_027_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_027/ov_SC06_027_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_027/ov_SC06_027_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_027/ov_SC06_027_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3423,7 +3423,7 @@ ov_SC06_029_ELF := $(ov_SC06_029_OUT).elf ov_SC06_029_MAPFILE := $(ov_SC06_029_OUT).map ov_SC06_029_LD_SCRIPT := $(ov_SC06_029_OUT).ld ov_SC06_029_SPLAT_YAML := config/splat.ov_SC06_029.yaml -ov_SC06_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_029_jr_8012ACE0.o,tail2.data.o,ov_SC06_029_jr_801380E0.o,tail3.data.o,ov_SC06_029_jr_8013F350.o,tail4.data.o,ov_SC06_029_jr_8013FFD8.o,tail5.data.o,ov_SC06_029_jr_8015444C.o,tail6.data.o,ov_SC06_029_jr_80154C24.o,ov_SC06_029_jr_801588CC.o,tail7.data.o,ov_SC06_029_jr_80159C84.o,tail8.data.o,ov_SC06_029_jr_8015A3C8.o,tail9.data.o,ov_SC06_029_jr_8015AE2C.o,tail10.data.o,ov_SC06_029_jr_8015C32C.o,tail11.data.o,ov_SC06_029_jr_8016AB6C.o,tail12.data.o,ov_SC06_029_jr_801734BC.o,tail13.data.o,ov_SC06_029_jr_80178D40.o,tail14.data.o,ov_SC06_029_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_029_jr_8012ACE0.o,tail2.data.o,ov_SC06_029_jr_801380E0.o,tail3.data.o,ov_SC06_029_jr_8013F350.o,tail4.data.o,ov_SC06_029_jr_8013FFD8.o,tail5.data.o,ov_SC06_029_jr_80140608.o,tail6.data.o,ov_SC06_029_jr_8015444C.o,tail7.data.o,ov_SC06_029_jr_80154C24.o,ov_SC06_029_jr_801588CC.o,tail8.data.o,ov_SC06_029_jr_80159C84.o,tail9.data.o,ov_SC06_029_jr_8015A3C8.o,tail10.data.o,ov_SC06_029_jr_8015AE2C.o,tail11.data.o,ov_SC06_029_jr_8015C32C.o,tail12.data.o,ov_SC06_029_jr_8016AB6C.o,tail13.data.o,ov_SC06_029_jr_801734BC.o,tail14.data.o,ov_SC06_029_jr_80178D40.o,tail15.data.o,ov_SC06_029_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_029/ov_SC06_029_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_029/ov_SC06_029_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_029/ov_SC06_029_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3450,7 +3450,7 @@ ov_SC06_030_ELF := $(ov_SC06_030_OUT).elf ov_SC06_030_MAPFILE := $(ov_SC06_030_OUT).map ov_SC06_030_LD_SCRIPT := $(ov_SC06_030_OUT).ld ov_SC06_030_SPLAT_YAML := config/splat.ov_SC06_030.yaml -ov_SC06_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_030_jr_8012ACE0.o,tail2.data.o,ov_SC06_030_jr_801380E0.o,tail3.data.o,ov_SC06_030_jr_8013F350.o,tail4.data.o,ov_SC06_030_jr_8013FFD8.o,tail5.data.o,ov_SC06_030_jr_8015444C.o,tail6.data.o,ov_SC06_030_jr_80154C24.o,ov_SC06_030_jr_801588CC.o,tail7.data.o,ov_SC06_030_jr_80159C84.o,tail8.data.o,ov_SC06_030_jr_8015A3C8.o,tail9.data.o,ov_SC06_030_jr_8015AE2C.o,tail10.data.o,ov_SC06_030_jr_8015C32C.o,tail11.data.o,ov_SC06_030_jr_8016AB6C.o,tail12.data.o,ov_SC06_030_jr_801734BC.o,tail13.data.o,ov_SC06_030_jr_80178D40.o,tail14.data.o,ov_SC06_030_jr_8017A4AC.o,tail15.data.o,ov_SC06_030_jr_8017C8D0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_030_jr_8012ACE0.o,tail2.data.o,ov_SC06_030_jr_801380E0.o,tail3.data.o,ov_SC06_030_jr_8013F350.o,tail4.data.o,ov_SC06_030_jr_8013FFD8.o,tail5.data.o,ov_SC06_030_jr_80140608.o,tail6.data.o,ov_SC06_030_jr_8015444C.o,tail7.data.o,ov_SC06_030_jr_80154C24.o,ov_SC06_030_jr_801588CC.o,tail8.data.o,ov_SC06_030_jr_80159C84.o,tail9.data.o,ov_SC06_030_jr_8015A3C8.o,tail10.data.o,ov_SC06_030_jr_8015AE2C.o,tail11.data.o,ov_SC06_030_jr_8015C32C.o,tail12.data.o,ov_SC06_030_jr_8016AB6C.o,tail13.data.o,ov_SC06_030_jr_801734BC.o,tail14.data.o,ov_SC06_030_jr_80178D40.o,tail15.data.o,ov_SC06_030_jr_8017A4AC.o,tail16.data.o,ov_SC06_030_jr_8017C8D0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_030/ov_SC06_030_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_030/ov_SC06_030_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_030/ov_SC06_030_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3477,7 +3477,7 @@ ov_SC06_032_ELF := $(ov_SC06_032_OUT).elf ov_SC06_032_MAPFILE := $(ov_SC06_032_OUT).map ov_SC06_032_LD_SCRIPT := $(ov_SC06_032_OUT).ld ov_SC06_032_SPLAT_YAML := config/splat.ov_SC06_032.yaml -ov_SC06_032_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_032_jr_8012ACE0.o,tail2.data.o,ov_SC06_032_jr_801380E0.o,tail3.data.o,ov_SC06_032_jr_8013F350.o,tail4.data.o,ov_SC06_032_jr_8013FFD8.o,tail5.data.o,ov_SC06_032_jr_8015444C.o,tail6.data.o,ov_SC06_032_jr_80154C24.o,ov_SC06_032_jr_801588CC.o,tail7.data.o,ov_SC06_032_jr_80159C84.o,tail8.data.o,ov_SC06_032_jr_8015A3C8.o,tail9.data.o,ov_SC06_032_jr_8015AE2C.o,tail10.data.o,ov_SC06_032_jr_8015C32C.o,tail11.data.o,ov_SC06_032_jr_8016AB6C.o,tail12.data.o,ov_SC06_032_jr_801734BC.o,tail13.data.o,ov_SC06_032_jr_80178D40.o,tail14.data.o,ov_SC06_032_jr_8017A4AC.o,tail15.data.o,ov_SC06_032_jr_8017C24C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_032_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_032_jr_8012ACE0.o,tail2.data.o,ov_SC06_032_jr_801380E0.o,tail3.data.o,ov_SC06_032_jr_8013F350.o,tail4.data.o,ov_SC06_032_jr_8013FFD8.o,tail5.data.o,ov_SC06_032_jr_80140608.o,tail6.data.o,ov_SC06_032_jr_8015444C.o,tail7.data.o,ov_SC06_032_jr_80154C24.o,ov_SC06_032_jr_801588CC.o,tail8.data.o,ov_SC06_032_jr_80159C84.o,tail9.data.o,ov_SC06_032_jr_8015A3C8.o,tail10.data.o,ov_SC06_032_jr_8015AE2C.o,tail11.data.o,ov_SC06_032_jr_8015C32C.o,tail12.data.o,ov_SC06_032_jr_8016AB6C.o,tail13.data.o,ov_SC06_032_jr_801734BC.o,tail14.data.o,ov_SC06_032_jr_80178D40.o,tail15.data.o,ov_SC06_032_jr_8017A4AC.o,tail16.data.o,ov_SC06_032_jr_8017C24C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_032/ov_SC06_032_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_032/ov_SC06_032_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_032/ov_SC06_032_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3504,7 +3504,7 @@ ov_SC06_033_ELF := $(ov_SC06_033_OUT).elf ov_SC06_033_MAPFILE := $(ov_SC06_033_OUT).map ov_SC06_033_LD_SCRIPT := $(ov_SC06_033_OUT).ld ov_SC06_033_SPLAT_YAML := config/splat.ov_SC06_033.yaml -ov_SC06_033_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_033_jr_8012ACE0.o,tail2.data.o,ov_SC06_033_jr_801380E0.o,tail3.data.o,ov_SC06_033_jr_8013F350.o,tail4.data.o,ov_SC06_033_jr_8013FFD8.o,tail5.data.o,ov_SC06_033_jr_8015444C.o,tail6.data.o,ov_SC06_033_jr_80154C24.o,ov_SC06_033_jr_801588CC.o,tail7.data.o,ov_SC06_033_jr_80159C84.o,tail8.data.o,ov_SC06_033_jr_8015A3C8.o,tail9.data.o,ov_SC06_033_jr_8015AE2C.o,tail10.data.o,ov_SC06_033_jr_8015C32C.o,tail11.data.o,ov_SC06_033_jr_8016AB6C.o,tail12.data.o,ov_SC06_033_jr_801734BC.o,tail13.data.o,ov_SC06_033_jr_80178D40.o,tail14.data.o,ov_SC06_033_jr_8017A4AC.o,tail15.data.o,ov_SC06_033_jr_8017C24C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_033_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_033_jr_8012ACE0.o,tail2.data.o,ov_SC06_033_jr_801380E0.o,tail3.data.o,ov_SC06_033_jr_8013F350.o,tail4.data.o,ov_SC06_033_jr_8013FFD8.o,tail5.data.o,ov_SC06_033_jr_80140608.o,tail6.data.o,ov_SC06_033_jr_8015444C.o,tail7.data.o,ov_SC06_033_jr_80154C24.o,ov_SC06_033_jr_801588CC.o,tail8.data.o,ov_SC06_033_jr_80159C84.o,tail9.data.o,ov_SC06_033_jr_8015A3C8.o,tail10.data.o,ov_SC06_033_jr_8015AE2C.o,tail11.data.o,ov_SC06_033_jr_8015C32C.o,tail12.data.o,ov_SC06_033_jr_8016AB6C.o,tail13.data.o,ov_SC06_033_jr_801734BC.o,tail14.data.o,ov_SC06_033_jr_80178D40.o,tail15.data.o,ov_SC06_033_jr_8017A4AC.o,tail16.data.o,ov_SC06_033_jr_8017C24C.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC06_033/ov_SC06_033_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC06_033/ov_SC06_033_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_033/ov_SC06_033_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3531,7 +3531,7 @@ ov_SC07_001_ELF := $(ov_SC07_001_OUT).elf ov_SC07_001_MAPFILE := $(ov_SC07_001_OUT).map ov_SC07_001_LD_SCRIPT := $(ov_SC07_001_OUT).ld ov_SC07_001_SPLAT_YAML := config/splat.ov_SC07_001.yaml -ov_SC07_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_001_jr_8012ACE0.o,tail2.data.o,ov_SC07_001_jr_801380E0.o,tail3.data.o,ov_SC07_001_jr_8013F350.o,tail4.data.o,ov_SC07_001_jr_8013FFD8.o,tail5.data.o,ov_SC07_001_jr_8015444C.o,tail6.data.o,ov_SC07_001_jr_80154C24.o,ov_SC07_001_jr_801588CC.o,tail7.data.o,ov_SC07_001_jr_80159C84.o,tail8.data.o,ov_SC07_001_jr_8015A3C8.o,tail9.data.o,ov_SC07_001_jr_8015AE2C.o,tail10.data.o,ov_SC07_001_jr_8015C32C.o,tail11.data.o,ov_SC07_001_jr_8016AB6C.o,tail12.data.o,ov_SC07_001_jr_801734BC.o,tail13.data.o,ov_SC07_001_jr_80178D40.o,tail14.data.o,ov_SC07_001_jr_8017A4AC.o,tail15.data.o,ov_SC07_001_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_001_jr_8012ACE0.o,tail2.data.o,ov_SC07_001_jr_801380E0.o,tail3.data.o,ov_SC07_001_jr_8013F350.o,tail4.data.o,ov_SC07_001_jr_8013FFD8.o,tail5.data.o,ov_SC07_001_jr_80140608.o,tail6.data.o,ov_SC07_001_jr_8015444C.o,tail7.data.o,ov_SC07_001_jr_80154C24.o,ov_SC07_001_jr_801588CC.o,tail8.data.o,ov_SC07_001_jr_80159C84.o,tail9.data.o,ov_SC07_001_jr_8015A3C8.o,tail10.data.o,ov_SC07_001_jr_8015AE2C.o,tail11.data.o,ov_SC07_001_jr_8015C32C.o,tail12.data.o,ov_SC07_001_jr_8016AB6C.o,tail13.data.o,ov_SC07_001_jr_801734BC.o,tail14.data.o,ov_SC07_001_jr_80178D40.o,tail15.data.o,ov_SC07_001_jr_8017A4AC.o,tail16.data.o,ov_SC07_001_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_001/ov_SC07_001_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC07_001/ov_SC07_001_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_001/ov_SC07_001_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3558,7 +3558,7 @@ ov_SC07_002_ELF := $(ov_SC07_002_OUT).elf ov_SC07_002_MAPFILE := $(ov_SC07_002_OUT).map ov_SC07_002_LD_SCRIPT := $(ov_SC07_002_OUT).ld ov_SC07_002_SPLAT_YAML := config/splat.ov_SC07_002.yaml -ov_SC07_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_002_jr_8012ACE0.o,tail2.data.o,ov_SC07_002_jr_801380E0.o,tail3.data.o,ov_SC07_002_jr_8013F350.o,tail4.data.o,ov_SC07_002_jr_8013FFD8.o,tail5.data.o,ov_SC07_002_jr_8015444C.o,tail6.data.o,ov_SC07_002_jr_80154C24.o,ov_SC07_002_jr_801588CC.o,tail7.data.o,ov_SC07_002_jr_80159C84.o,tail8.data.o,ov_SC07_002_jr_8015A3C8.o,tail9.data.o,ov_SC07_002_jr_8015AE2C.o,tail10.data.o,ov_SC07_002_jr_8015C32C.o,tail11.data.o,ov_SC07_002_jr_8016AB6C.o,tail12.data.o,ov_SC07_002_jr_801734BC.o,tail13.data.o,ov_SC07_002_jr_80178D40.o,tail14.data.o,ov_SC07_002_jr_8017A4AC.o,tail15.data.o,ov_SC07_002_jr_8017C8D0.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_002_jr_8012ACE0.o,tail2.data.o,ov_SC07_002_jr_801380E0.o,tail3.data.o,ov_SC07_002_jr_8013F350.o,tail4.data.o,ov_SC07_002_jr_8013FFD8.o,tail5.data.o,ov_SC07_002_jr_80140608.o,tail6.data.o,ov_SC07_002_jr_8015444C.o,tail7.data.o,ov_SC07_002_jr_80154C24.o,ov_SC07_002_jr_801588CC.o,tail8.data.o,ov_SC07_002_jr_80159C84.o,tail9.data.o,ov_SC07_002_jr_8015A3C8.o,tail10.data.o,ov_SC07_002_jr_8015AE2C.o,tail11.data.o,ov_SC07_002_jr_8015C32C.o,tail12.data.o,ov_SC07_002_jr_8016AB6C.o,tail13.data.o,ov_SC07_002_jr_801734BC.o,tail14.data.o,ov_SC07_002_jr_80178D40.o,tail15.data.o,ov_SC07_002_jr_8017A4AC.o,tail16.data.o,ov_SC07_002_jr_8017C8D0.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_002/ov_SC07_002_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC07_002/ov_SC07_002_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_002/ov_SC07_002_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3585,7 +3585,7 @@ ov_SC07_008_ELF := $(ov_SC07_008_OUT).elf ov_SC07_008_MAPFILE := $(ov_SC07_008_OUT).map ov_SC07_008_LD_SCRIPT := $(ov_SC07_008_OUT).ld ov_SC07_008_SPLAT_YAML := config/splat.ov_SC07_008.yaml -ov_SC07_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_008_jr_8012ACE0.o,tail2.data.o,ov_SC07_008_jr_801380E0.o,tail3.data.o,ov_SC07_008_jr_8013F350.o,tail4.data.o,ov_SC07_008_jr_8013FFD8.o,tail5.data.o,ov_SC07_008_jr_8015444C.o,tail6.data.o,ov_SC07_008_jr_80154C24.o,ov_SC07_008_jr_801588CC.o,tail7.data.o,ov_SC07_008_jr_80159C84.o,tail8.data.o,ov_SC07_008_jr_8015A3C8.o,tail9.data.o,ov_SC07_008_jr_8015AE2C.o,tail10.data.o,ov_SC07_008_jr_8015C32C.o,tail11.data.o,ov_SC07_008_jr_8016AB6C.o,tail12.data.o,ov_SC07_008_jr_801734BC.o,tail13.data.o,ov_SC07_008_jr_80178D40.o,tail14.data.o,ov_SC07_008_jr_8017A4AC.o,tail15.data.o,ov_SC07_008_jr_8017BEBC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_008_jr_8012ACE0.o,tail2.data.o,ov_SC07_008_jr_801380E0.o,tail3.data.o,ov_SC07_008_jr_8013F350.o,tail4.data.o,ov_SC07_008_jr_8013FFD8.o,tail5.data.o,ov_SC07_008_jr_80140608.o,tail6.data.o,ov_SC07_008_jr_8015444C.o,tail7.data.o,ov_SC07_008_jr_80154C24.o,ov_SC07_008_jr_801588CC.o,tail8.data.o,ov_SC07_008_jr_80159C84.o,tail9.data.o,ov_SC07_008_jr_8015A3C8.o,tail10.data.o,ov_SC07_008_jr_8015AE2C.o,tail11.data.o,ov_SC07_008_jr_8015C32C.o,tail12.data.o,ov_SC07_008_jr_8016AB6C.o,tail13.data.o,ov_SC07_008_jr_801734BC.o,tail14.data.o,ov_SC07_008_jr_80178D40.o,tail15.data.o,ov_SC07_008_jr_8017A4AC.o,tail16.data.o,ov_SC07_008_jr_8017BEBC.o,tail17.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_008/ov_SC07_008_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC07_008/ov_SC07_008_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_008/ov_SC07_008_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3612,7 +3612,7 @@ ov_SC07_009_ELF := $(ov_SC07_009_OUT).elf ov_SC07_009_MAPFILE := $(ov_SC07_009_OUT).map ov_SC07_009_LD_SCRIPT := $(ov_SC07_009_OUT).ld ov_SC07_009_SPLAT_YAML := config/splat.ov_SC07_009.yaml -ov_SC07_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_009_jr_8012ACE0.o,tail2.data.o,ov_SC07_009_jr_801380E0.o,tail3.data.o,ov_SC07_009_jr_8013F350.o,tail4.data.o,ov_SC07_009_jr_8013FFD8.o,tail5.data.o,ov_SC07_009_jr_8015444C.o,tail6.data.o,ov_SC07_009_jr_80154C24.o,ov_SC07_009_jr_801588CC.o,tail7.data.o,ov_SC07_009_jr_80159C84.o,tail8.data.o,ov_SC07_009_jr_8015A3C8.o,tail9.data.o,ov_SC07_009_jr_8015AE2C.o,tail10.data.o,ov_SC07_009_jr_8015C32C.o,tail11.data.o,ov_SC07_009_jr_8016AB6C.o,tail12.data.o,ov_SC07_009_jr_801734BC.o,tail13.data.o,ov_SC07_009_jr_80178D40.o,tail14.data.o,ov_SC07_009_jr_8017A4AC.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_009_jr_8012ACE0.o,tail2.data.o,ov_SC07_009_jr_801380E0.o,tail3.data.o,ov_SC07_009_jr_8013F350.o,tail4.data.o,ov_SC07_009_jr_8013FFD8.o,tail5.data.o,ov_SC07_009_jr_80140608.o,tail6.data.o,ov_SC07_009_jr_8015444C.o,tail7.data.o,ov_SC07_009_jr_80154C24.o,ov_SC07_009_jr_801588CC.o,tail8.data.o,ov_SC07_009_jr_80159C84.o,tail9.data.o,ov_SC07_009_jr_8015A3C8.o,tail10.data.o,ov_SC07_009_jr_8015AE2C.o,tail11.data.o,ov_SC07_009_jr_8015C32C.o,tail12.data.o,ov_SC07_009_jr_8016AB6C.o,tail13.data.o,ov_SC07_009_jr_801734BC.o,tail14.data.o,ov_SC07_009_jr_80178D40.o,tail15.data.o,ov_SC07_009_jr_8017A4AC.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_009/ov_SC07_009_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) build/src/ov_SC07_009/ov_SC07_009_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_009/ov_SC07_009_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 @@ -3639,7 +3639,7 @@ ov_SC07_006_ELF := $(ov_SC07_006_OUT).elf ov_SC07_006_MAPFILE := $(ov_SC07_006_OUT).map ov_SC07_006_LD_SCRIPT := $(ov_SC07_006_OUT).ld ov_SC07_006_SPLAT_YAML := config/splat.ov_SC07_006.yaml -ov_SC07_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_006_jr_80131340.o,tail2.data.o,ov_SC07_006_jr_8013F350.o,tail3.data.o,ov_SC07_006_jr_80154C24.o,ov_SC07_006_jr_801588CC.o,tail4.data.o,ov_SC07_006_jr_8015C32C.o,tail5.data.o,ov_SC07_006_jr_8017BEBC.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_006_jr_80131340.o,tail2.data.o,ov_SC07_006_jr_8013F350.o,tail3.data.o,ov_SC07_006_jr_80140608.o,tail4.data.o,ov_SC07_006_jr_80154C24.o,ov_SC07_006_jr_801588CC.o,tail5.data.o,ov_SC07_006_jr_8015C32C.o,tail6.data.o,ov_SC07_006_jr_8017BEBC.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_006/ov_SC07_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_006/ov_SC07_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 build/src/ov_SC07_006/ov_SC07_006_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 @@ -3664,7 +3664,7 @@ ov_SC07_007_ELF := $(ov_SC07_007_OUT).elf ov_SC07_007_MAPFILE := $(ov_SC07_007_OUT).map ov_SC07_007_LD_SCRIPT := $(ov_SC07_007_OUT).ld ov_SC07_007_SPLAT_YAML := config/splat.ov_SC07_007.yaml -ov_SC07_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_007_jr_80131340.o,tail2.data.o,ov_SC07_007_jr_8013F350.o,tail3.data.o,ov_SC07_007_jr_80154C24.o,ov_SC07_007_jr_801588CC.o,tail4.data.o,ov_SC07_007_jr_8015C32C.o,tail5.data.o,ov_SC07_007_jr_8017BEBC.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_007_jr_80131340.o,tail2.data.o,ov_SC07_007_jr_8013F350.o,tail3.data.o,ov_SC07_007_jr_80140608.o,tail4.data.o,ov_SC07_007_jr_80154C24.o,ov_SC07_007_jr_801588CC.o,tail5.data.o,ov_SC07_007_jr_8015C32C.o,tail6.data.o,ov_SC07_007_jr_8017BEBC.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_007/ov_SC07_007_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_007/ov_SC07_007_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 build/src/ov_SC07_007/ov_SC07_007_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 @@ -3689,7 +3689,7 @@ ov_SC07_010_ELF := $(ov_SC07_010_OUT).elf ov_SC07_010_MAPFILE := $(ov_SC07_010_OUT).map ov_SC07_010_LD_SCRIPT := $(ov_SC07_010_OUT).ld ov_SC07_010_SPLAT_YAML := config/splat.ov_SC07_010.yaml -ov_SC07_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_010.o,tail2.data.o,ov_SC07_010_jr_8013F350.o,tail3.data.o,ov_SC07_010_jr_80154C24.o,ov_SC07_010_jr_801588CC.o,tail4.data.o,ov_SC07_010_jr_8015C32C.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_010.o,tail2.data.o,ov_SC07_010_jr_8013F350.o,tail3.data.o,ov_SC07_010_jr_80140608.o,tail4.data.o,ov_SC07_010_jr_80154C24.o,ov_SC07_010_jr_801588CC.o,tail5.data.o,ov_SC07_010_jr_8015C32C.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_010/ov_SC07_010_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 build/src/ov_SC07_010/ov_SC07_010_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 ov_SC07_010_CHECK_SHA := config/check.ov_SC07_010.sha @@ -3713,7 +3713,7 @@ ov_SC07_011_ELF := $(ov_SC07_011_OUT).elf ov_SC07_011_MAPFILE := $(ov_SC07_011_OUT).map ov_SC07_011_LD_SCRIPT := $(ov_SC07_011_OUT).ld ov_SC07_011_SPLAT_YAML := config/splat.ov_SC07_011.yaml -ov_SC07_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_011_jr_80131340.o,tail2.data.o,ov_SC07_011_jr_8013F350.o,tail3.data.o,ov_SC07_011_jr_80154C24.o,ov_SC07_011_jr_801588CC.o,tail4.data.o,ov_SC07_011_jr_8015C32C.o,tail5.data.o,ov_SC07_011_jr_8017BEBC.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_011_jr_80131340.o,tail2.data.o,ov_SC07_011_jr_8013F350.o,tail3.data.o,ov_SC07_011_jr_80140608.o,tail4.data.o,ov_SC07_011_jr_80154C24.o,ov_SC07_011_jr_801588CC.o,tail5.data.o,ov_SC07_011_jr_8015C32C.o,tail6.data.o,ov_SC07_011_jr_8017BEBC.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_011/ov_SC07_011_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_011/ov_SC07_011_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 build/src/ov_SC07_011/ov_SC07_011_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 diff --git a/config/splat.ov_SC01_000.yaml b/config/splat.ov_SC01_000.yaml index e7ab6f5de..1888ea177 100644 --- a/config/splat.ov_SC01_000.yaml +++ b/config/splat.ov_SC01_000.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_000_jr_801380E0] - [0x171f8, c, ov_SC01_000_jr_8013F350] - [0x17e80, c, ov_SC01_000_jr_8013FFD8] + - [0x184b0, c, ov_SC01_000_jr_80140608] - [0x1CA44, c, ov_SC01_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_000_after] - [0x2c2f4, c, ov_SC01_000_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x7b9e0, data, tail4] - [0x7b9e4, .rodata, ov_SC01_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7ba18, data, tail5] + - [0x7ba54, .rodata, ov_SC01_000_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7ba68, data, tail6] - [0x7ba80, .rodata, ov_SC01_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7baec, data, tail6] + - [0x7baec, data, tail7] - [0x7bb5c, .rodata, ov_SC01_000_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7bba0, .rodata, ov_SC01_000_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bbe8, data, tail7] + - [0x7bbe8, data, tail8] - [0x7bc48, .rodata, ov_SC01_000_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bc7c, data, tail8] + - [0x7bc7c, data, tail9] - [0x7bc80, .rodata, ov_SC01_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bc9c, data, tail9] + - [0x7bc9c, data, tail10] - [0x7bca0, .rodata, ov_SC01_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bcbc, data, tail10] + - [0x7bcbc, data, tail11] - [0x7bce0, .rodata, ov_SC01_000_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bcfc, data, tail11] + - [0x7bcfc, data, tail12] - [0x7bd14, .rodata, ov_SC01_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bd34, data, tail12] + - [0x7bd34, data, tail13] - [0x7bdb4, .rodata, ov_SC01_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bdc8, data, tail13] + - [0x7bdc8, data, tail14] - [0x7bf70, .rodata, ov_SC01_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c0e8, data, tail14] + - [0x7c0e8, data, tail15] - [0x7c178, .rodata, ov_SC01_000_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c204, data, tail15] + - [0x7c204, data, tail16] - [0x7c21c, .rodata, ov_SC01_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c23c, data, tail16] + - [0x7c23c, data, tail17] - [0x7D78C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7D78F] # 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_SC01_001.yaml b/config/splat.ov_SC01_001.yaml index 78667a03d..defe4edf3 100644 --- a/config/splat.ov_SC01_001.yaml +++ b/config/splat.ov_SC01_001.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_001_jr_801380E0] - [0x171f8, c, ov_SC01_001_jr_8013F350] - [0x17e80, c, ov_SC01_001_jr_8013FFD8] + - [0x184b0, c, ov_SC01_001_jr_80140608] - [0x1CA44, c, ov_SC01_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_001_after] - [0x2c2f4, c, ov_SC01_001_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xc3ab8, data, tail4] - [0xc3abc, .rodata, ov_SC01_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3af0, data, tail5] + - [0xc3b2c, .rodata, ov_SC01_001_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc3b40, data, tail6] - [0xc3b58, .rodata, ov_SC01_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3bc4, data, tail6] + - [0xc3bc4, data, tail7] - [0xc3c34, .rodata, ov_SC01_001_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3c78, .rodata, ov_SC01_001_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3cc0, data, tail7] + - [0xc3cc0, data, tail8] - [0xc3d20, .rodata, ov_SC01_001_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3d54, data, tail8] + - [0xc3d54, data, tail9] - [0xc3d58, .rodata, ov_SC01_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3d74, data, tail9] + - [0xc3d74, data, tail10] - [0xc3d78, .rodata, ov_SC01_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3d94, data, tail10] + - [0xc3d94, data, tail11] - [0xc3db8, .rodata, ov_SC01_001_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3dd4, data, tail11] + - [0xc3dd4, data, tail12] - [0xc3dec, .rodata, ov_SC01_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3e0c, data, tail12] + - [0xc3e0c, data, tail13] - [0xc3e8c, .rodata, ov_SC01_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3ea0, data, tail13] + - [0xc3ea0, data, tail14] - [0xc4048, .rodata, ov_SC01_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc41c0, data, tail14] + - [0xc41c0, data, tail15] - [0xc4250, .rodata, ov_SC01_001_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc42dc, data, tail15] + - [0xc42dc, data, tail16] - [0xc42f4, .rodata, ov_SC01_001_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4314, data, tail16] + - [0xc4314, data, tail17] - [0xCB06C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCB06F] # 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_SC01_004.yaml b/config/splat.ov_SC01_004.yaml index bf241dca8..2d4226051 100644 --- a/config/splat.ov_SC01_004.yaml +++ b/config/splat.ov_SC01_004.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_004_jr_801380E0] - [0x171f8, c, ov_SC01_004_jr_8013F350] - [0x17e80, c, ov_SC01_004_jr_8013FFD8] + - [0x184b0, c, ov_SC01_004_jr_80140608] - [0x1CA44, c, ov_SC01_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_004_after] - [0x2c2f4, c, ov_SC01_004_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x65e98, data, tail4] - [0x65e9c, .rodata, ov_SC01_004_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65ed0, data, tail5] + - [0x65f0c, .rodata, ov_SC01_004_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65f20, data, tail6] - [0x65f38, .rodata, ov_SC01_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fa4, data, tail6] + - [0x65fa4, data, tail7] - [0x66014, .rodata, ov_SC01_004_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66058, .rodata, ov_SC01_004_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x660a0, data, tail7] + - [0x660a0, data, tail8] - [0x66100, .rodata, ov_SC01_004_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66134, data, tail8] + - [0x66134, data, tail9] - [0x66138, .rodata, ov_SC01_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66154, data, tail9] + - [0x66154, data, tail10] - [0x66158, .rodata, ov_SC01_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66174, data, tail10] + - [0x66174, data, tail11] - [0x66198, .rodata, ov_SC01_004_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x661b4, data, tail11] + - [0x661b4, data, tail12] - [0x661cc, .rodata, ov_SC01_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x661ec, data, tail12] + - [0x661ec, data, tail13] - [0x6626c, .rodata, ov_SC01_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66280, data, tail13] + - [0x66280, data, tail14] - [0x66428, .rodata, ov_SC01_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x665a0, data, tail14] + - [0x665a0, data, tail15] - [0x66630, .rodata, ov_SC01_004_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x666bc, data, tail15] + - [0x666bc, data, tail16] - [0x666d4, .rodata, ov_SC01_004_jr_8017BE9C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x666f4, data, tail16] + - [0x666f4, data, tail17] - [0x68274, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x68277] # 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_SC01_005.yaml b/config/splat.ov_SC01_005.yaml index cd152ad84..aa196ce3c 100644 --- a/config/splat.ov_SC01_005.yaml +++ b/config/splat.ov_SC01_005.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_005_jr_801380E0] - [0x171f8, c, ov_SC01_005_jr_8013F350] - [0x17e80, c, ov_SC01_005_jr_8013FFD8] + - [0x184b0, c, ov_SC01_005_jr_80140608] - [0x1CA44, c, ov_SC01_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_005_after] - [0x2c2f4, c, ov_SC01_005_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa35f8, data, tail4] - [0xa35fc, .rodata, ov_SC01_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa3630, data, tail5] + - [0xa366c, .rodata, ov_SC01_005_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa3680, data, tail6] - [0xa3698, .rodata, ov_SC01_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3704, data, tail6] + - [0xa3704, data, tail7] - [0xa3774, .rodata, ov_SC01_005_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa37b8, .rodata, ov_SC01_005_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3800, data, tail7] + - [0xa3800, data, tail8] - [0xa3860, .rodata, ov_SC01_005_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3894, data, tail8] + - [0xa3894, data, tail9] - [0xa3898, .rodata, ov_SC01_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38b4, data, tail9] + - [0xa38b4, data, tail10] - [0xa38b8, .rodata, ov_SC01_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38d4, data, tail10] + - [0xa38d4, data, tail11] - [0xa38f8, .rodata, ov_SC01_005_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3914, data, tail11] + - [0xa3914, data, tail12] - [0xa392c, .rodata, ov_SC01_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa394c, data, tail12] + - [0xa394c, data, tail13] - [0xa39cc, .rodata, ov_SC01_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail13] + - [0xa39e0, data, tail14] - [0xa3b88, .rodata, ov_SC01_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail14] + - [0xa3d00, data, tail15] - [0xa3d90, .rodata, ov_SC01_005_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3e1c, data, tail15] + - [0xa3e1c, data, tail16] - [0xa3e34, .rodata, ov_SC01_005_jr_8017C340] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3e54, data, tail16] + - [0xa3e54, data, tail17] - [0xA5F08, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA5F09] # 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_SC01_006.yaml b/config/splat.ov_SC01_006.yaml index 18997fcff..cb8b7c94b 100644 --- a/config/splat.ov_SC01_006.yaml +++ b/config/splat.ov_SC01_006.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_006_jr_801380E0] - [0x171f8, c, ov_SC01_006_jr_8013F350] - [0x17e80, c, ov_SC01_006_jr_8013FFD8] + - [0x184b0, c, ov_SC01_006_jr_80140608] - [0x1CA44, c, ov_SC01_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_006_after] - [0x2c2f4, c, ov_SC01_006_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa35f8, data, tail4] - [0xa35fc, .rodata, ov_SC01_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa3630, data, tail5] + - [0xa366c, .rodata, ov_SC01_006_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa3680, data, tail6] - [0xa3698, .rodata, ov_SC01_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3704, data, tail6] + - [0xa3704, data, tail7] - [0xa3774, .rodata, ov_SC01_006_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa37b8, .rodata, ov_SC01_006_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3800, data, tail7] + - [0xa3800, data, tail8] - [0xa3860, .rodata, ov_SC01_006_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3894, data, tail8] + - [0xa3894, data, tail9] - [0xa3898, .rodata, ov_SC01_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38b4, data, tail9] + - [0xa38b4, data, tail10] - [0xa38b8, .rodata, ov_SC01_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38d4, data, tail10] + - [0xa38d4, data, tail11] - [0xa38f8, .rodata, ov_SC01_006_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3914, data, tail11] + - [0xa3914, data, tail12] - [0xa392c, .rodata, ov_SC01_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa394c, data, tail12] + - [0xa394c, data, tail13] - [0xa39cc, .rodata, ov_SC01_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail13] + - [0xa39e0, data, tail14] - [0xa3b88, .rodata, ov_SC01_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail14] + - [0xa3d00, data, tail15] - [0xa3d90, .rodata, ov_SC01_006_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3e1c, data, tail15] + - [0xa3e1c, data, tail16] - [0xa3e34, .rodata, ov_SC01_006_jr_8017C340] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3e54, data, tail16] + - [0xa3e54, data, tail17] - [0xA5F08, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA5F09] # 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_SC01_008.yaml b/config/splat.ov_SC01_008.yaml index e07bbc2d6..201600a44 100644 --- a/config/splat.ov_SC01_008.yaml +++ b/config/splat.ov_SC01_008.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_008_jr_801380E0] - [0x171f8, c, ov_SC01_008_jr_8013F350] - [0x17e80, c, ov_SC01_008_jr_8013FFD8] + - [0x184b0, c, ov_SC01_008_jr_80140608] - [0x1CA44, c, ov_SC01_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_008_after] - [0x2c2f4, c, ov_SC01_008_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x790a8, data, tail4] - [0x790ac, .rodata, ov_SC01_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x790e0, data, tail5] + - [0x7911c, .rodata, ov_SC01_008_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x79130, data, tail6] - [0x79148, .rodata, ov_SC01_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x791b4, data, tail6] + - [0x791b4, data, tail7] - [0x79224, .rodata, ov_SC01_008_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x79268, .rodata, ov_SC01_008_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x792b0, data, tail7] + - [0x792b0, data, tail8] - [0x79310, .rodata, ov_SC01_008_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79344, data, tail8] + - [0x79344, data, tail9] - [0x79348, .rodata, ov_SC01_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79364, data, tail9] + - [0x79364, data, tail10] - [0x79368, .rodata, ov_SC01_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79384, data, tail10] + - [0x79384, data, tail11] - [0x793a8, .rodata, ov_SC01_008_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x793c4, data, tail11] + - [0x793c4, data, tail12] - [0x793dc, .rodata, ov_SC01_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x793fc, data, tail12] + - [0x793fc, data, tail13] - [0x7947c, .rodata, ov_SC01_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79490, data, tail13] + - [0x79490, data, tail14] - [0x79638, .rodata, ov_SC01_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x797b0, data, tail14] + - [0x797b0, data, tail15] - [0x79840, .rodata, ov_SC01_008_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x798cc, data, tail15] + - [0x798cc, data, tail16] - [0x798e4, .rodata, ov_SC01_008_jr_8017BE9C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79904, data, tail16] + - [0x79904, data, tail17] - [0x7B484, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7B487] # 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_SC01_009.yaml b/config/splat.ov_SC01_009.yaml index 52f1ba7cd..a2cc2ee29 100644 --- a/config/splat.ov_SC01_009.yaml +++ b/config/splat.ov_SC01_009.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_009_jr_801380E0] - [0x171f8, c, ov_SC01_009_jr_8013F350] - [0x17e80, c, ov_SC01_009_jr_8013FFD8] + - [0x184b0, c, ov_SC01_009_jr_80140608] - [0x1CA44, c, ov_SC01_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_009_after] - [0x2c2f4, c, ov_SC01_009_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xc8e6c, data, tail4] - [0xc8e70, .rodata, ov_SC01_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc8ea4, data, tail5] + - [0xc8ee0, .rodata, ov_SC01_009_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc8ef4, data, tail6] - [0xc8f0c, .rodata, ov_SC01_009_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc8f78, data, tail6] + - [0xc8f78, data, tail7] - [0xc8fe8, .rodata, ov_SC01_009_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc902c, .rodata, ov_SC01_009_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9074, data, tail7] + - [0xc9074, data, tail8] - [0xc90d4, .rodata, ov_SC01_009_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9108, data, tail8] + - [0xc9108, data, tail9] - [0xc910c, .rodata, ov_SC01_009_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9128, data, tail9] + - [0xc9128, data, tail10] - [0xc912c, .rodata, ov_SC01_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9148, data, tail10] + - [0xc9148, data, tail11] - [0xc916c, .rodata, ov_SC01_009_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9188, data, tail11] + - [0xc9188, data, tail12] - [0xc91a0, .rodata, ov_SC01_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc91c0, data, tail12] + - [0xc91c0, data, tail13] - [0xc9240, .rodata, ov_SC01_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9254, data, tail13] + - [0xc9254, data, tail14] - [0xc93fc, .rodata, ov_SC01_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9574, data, tail14] + - [0xc9574, data, tail15] - [0xc9604, .rodata, ov_SC01_009_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9690, data, tail15] + - [0xc9690, data, tail16] - [0xc96a8, .rodata, ov_SC01_009_jr_8017BE9C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc96c8, data, tail16] + - [0xc96c8, data, tail17] - [0xCB304, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCB307] # 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_SC01_074.yaml b/config/splat.ov_SC01_074.yaml index 6718c2fd6..82ce3df13 100644 --- a/config/splat.ov_SC01_074.yaml +++ b/config/splat.ov_SC01_074.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_074_jr_801380E0] - [0x171f8, c, ov_SC01_074_jr_8013F350] - [0x17e80, c, ov_SC01_074_jr_8013FFD8] + - [0x184b0, c, ov_SC01_074_jr_80140608] - [0x1CA44, c, ov_SC01_074_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_074_after] - [0x2c2f4, c, ov_SC01_074_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x71efc, data, tail4] - [0x71f00, .rodata, ov_SC01_074_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71f34, data, tail5] + - [0x71f70, .rodata, ov_SC01_074_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71f84, data, tail6] - [0x71f9c, .rodata, ov_SC01_074_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72008, data, tail6] + - [0x72008, data, tail7] - [0x72078, .rodata, ov_SC01_074_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x720bc, .rodata, ov_SC01_074_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72104, data, tail7] + - [0x72104, data, tail8] - [0x72164, .rodata, ov_SC01_074_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72198, data, tail8] + - [0x72198, data, tail9] - [0x7219c, .rodata, ov_SC01_074_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x721b8, data, tail9] + - [0x721b8, data, tail10] - [0x721bc, .rodata, ov_SC01_074_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x721d8, data, tail10] + - [0x721d8, data, tail11] - [0x721fc, .rodata, ov_SC01_074_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72218, data, tail11] + - [0x72218, data, tail12] - [0x72230, .rodata, ov_SC01_074_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72250, data, tail12] + - [0x72250, data, tail13] - [0x722d0, .rodata, ov_SC01_074_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722e4, data, tail13] + - [0x722e4, data, tail14] - [0x7248c, .rodata, ov_SC01_074_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72604, data, tail14] + - [0x72604, data, tail15] - [0x72694, .rodata, ov_SC01_074_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72720, data, tail15] + - [0x72720, data, tail16] - [0x72738, .rodata, ov_SC01_074_jr_8017BE9C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72758, data, tail16] + - [0x72758, data, tail17] - [0x73C14, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x73C17] # 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_SC01_077.yaml b/config/splat.ov_SC01_077.yaml index 8209614b3..437e3b64d 100644 --- a/config/splat.ov_SC01_077.yaml +++ b/config/splat.ov_SC01_077.yaml @@ -98,7 +98,7 @@ segments: - [0xb01a4, .rodata, ov_SC01_077_o0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb0280, data, tail4] - [0xb0708, .rodata, ov_SC01_077] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb07ac, data, tail5] + - [0xb07c4, data, tail5] - [0xb07dc, .rodata, ov_SC01_077_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb0848, data, tail6] - [0xb08b8, .rodata, ov_SC01_077_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) diff --git a/config/splat.ov_SC01_080.yaml b/config/splat.ov_SC01_080.yaml index 57bbb811f..36060f5ba 100644 --- a/config/splat.ov_SC01_080.yaml +++ b/config/splat.ov_SC01_080.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_080_jr_801380E0] - [0x171f8, c, ov_SC01_080_jr_8013F350] - [0x17e80, c, ov_SC01_080_jr_8013FFD8] + - [0x184b0, c, ov_SC01_080_jr_80140608] - [0x1CA44, c, ov_SC01_080_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_080_after] - [0x2c2f4, c, ov_SC01_080_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x9bd1c, data, tail4] - [0x9bd20, .rodata, ov_SC01_080_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bd54, data, tail5] + - [0x9bd90, .rodata, ov_SC01_080_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9bda4, data, tail6] - [0x9bdbc, .rodata, ov_SC01_080_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9be28, data, tail6] + - [0x9be28, data, tail7] - [0x9be98, .rodata, ov_SC01_080_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bedc, .rodata, ov_SC01_080_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bf24, data, tail7] + - [0x9bf24, data, tail8] - [0x9bf84, .rodata, ov_SC01_080_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bfb8, data, tail8] + - [0x9bfb8, data, tail9] - [0x9bfbc, .rodata, ov_SC01_080_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bfd8, data, tail9] + - [0x9bfd8, data, tail10] - [0x9bfdc, .rodata, ov_SC01_080_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bff8, data, tail10] + - [0x9bff8, data, tail11] - [0x9c01c, .rodata, ov_SC01_080_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c038, data, tail11] + - [0x9c038, data, tail12] - [0x9c050, .rodata, ov_SC01_080_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c070, data, tail12] + - [0x9c070, data, tail13] - [0x9c0f0, .rodata, ov_SC01_080_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c104, data, tail13] + - [0x9c104, data, tail14] - [0x9c2ac, .rodata, ov_SC01_080_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c424, data, tail14] + - [0x9c424, data, tail15] - [0x9c4b4, .rodata, ov_SC01_080_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c540, data, tail15] + - [0x9c540, data, tail16] - [0x9FDF4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FDF7] # 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_SC01_084.yaml b/config/splat.ov_SC01_084.yaml index 1a6605e5f..3d4b8ba4e 100644 --- a/config/splat.ov_SC01_084.yaml +++ b/config/splat.ov_SC01_084.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC01_084_jr_801380E0] - [0x171f8, c, ov_SC01_084_jr_8013F350] - [0x17e80, c, ov_SC01_084_jr_8013FFD8] + - [0x184b0, c, ov_SC01_084_jr_80140608] - [0x1CA44, c, ov_SC01_084_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_084_after] - [0x2c2f4, c, ov_SC01_084_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9d6ec, data, tail4] - [0x9d6f0, .rodata, ov_SC01_084_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d724, data, tail5] + - [0x9d760, .rodata, ov_SC01_084_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d774, data, tail6] - [0x9d78c, .rodata, ov_SC01_084_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d7f8, data, tail6] + - [0x9d7f8, data, tail7] - [0x9d868, .rodata, ov_SC01_084_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d8ac, .rodata, ov_SC01_084_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d8f4, data, tail7] + - [0x9d8f4, data, tail8] - [0x9d954, .rodata, ov_SC01_084_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d988, data, tail8] + - [0x9d988, data, tail9] - [0x9d98c, .rodata, ov_SC01_084_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d9a8, data, tail9] + - [0x9d9a8, data, tail10] - [0x9d9ac, .rodata, ov_SC01_084_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d9c8, data, tail10] + - [0x9d9c8, data, tail11] - [0x9d9ec, .rodata, ov_SC01_084_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9da08, data, tail11] + - [0x9da08, data, tail12] - [0x9da20, .rodata, ov_SC01_084_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9da40, data, tail12] + - [0x9da40, data, tail13] - [0x9dac0, .rodata, ov_SC01_084_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9dad4, data, tail13] + - [0x9dad4, data, tail14] - [0x9dc7c, .rodata, ov_SC01_084_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ddf4, data, tail14] + - [0x9ddf4, data, tail15] - [0x9de84, .rodata, ov_SC01_084_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9df10, data, tail15] + - [0x9df10, data, tail16] - [0x9df28, .rodata, ov_SC01_084_jr_8017CA80] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9df48, data, tail16] + - [0x9df48, data, tail17] - [0x9FA9C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FA9F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_000.yaml b/config/splat.ov_SC02_000.yaml index 370259f48..410bb76d1 100644 --- a/config/splat.ov_SC02_000.yaml +++ b/config/splat.ov_SC02_000.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_000_jr_801380E0] - [0x171f8, c, ov_SC02_000_jr_8013F350] - [0x17e80, c, ov_SC02_000_jr_8013FFD8] + - [0x184b0, c, ov_SC02_000_jr_80140608] - [0x1CA44, c, ov_SC02_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_000_after] - [0x2c2f4, c, ov_SC02_000_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xbdf40, data, tail4] - [0xbdf44, .rodata, ov_SC02_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbdf78, data, tail5] + - [0xbdfb4, .rodata, ov_SC02_000_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbdfc8, data, tail6] - [0xbdfe0, .rodata, ov_SC02_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe04c, data, tail6] + - [0xbe04c, data, tail7] - [0xbe0bc, .rodata, ov_SC02_000_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe100, .rodata, ov_SC02_000_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe148, data, tail7] + - [0xbe148, data, tail8] - [0xbe1a8, .rodata, ov_SC02_000_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe1dc, data, tail8] + - [0xbe1dc, data, tail9] - [0xbe1e0, .rodata, ov_SC02_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe1fc, data, tail9] + - [0xbe1fc, data, tail10] - [0xbe200, .rodata, ov_SC02_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe21c, data, tail10] + - [0xbe21c, data, tail11] - [0xbe240, .rodata, ov_SC02_000_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe25c, data, tail11] + - [0xbe25c, data, tail12] - [0xbe274, .rodata, ov_SC02_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe294, data, tail12] + - [0xbe294, data, tail13] - [0xbe314, .rodata, ov_SC02_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail13] + - [0xbe328, data, tail14] - [0xbe4d0, .rodata, ov_SC02_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail14] + - [0xbe648, data, tail15] - [0xbe6d8, .rodata, ov_SC02_000_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe764, data, tail15] + - [0xbe764, data, tail16] - [0xbe944, .rodata, ov_SC02_000_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail16] + - [0xbe964, data, tail17] - [0xC070C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC070F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_003.yaml b/config/splat.ov_SC02_003.yaml index a1498b6ae..a7d2e29c4 100644 --- a/config/splat.ov_SC02_003.yaml +++ b/config/splat.ov_SC02_003.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_003_jr_801380E0] - [0x171f8, c, ov_SC02_003_jr_8013F350] - [0x17e80, c, ov_SC02_003_jr_8013FFD8] + - [0x184b0, c, ov_SC02_003_jr_80140608] - [0x1CA44, c, ov_SC02_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_003_after] - [0x2c2f4, c, ov_SC02_003_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xbdf40, data, tail4] - [0xbdf44, .rodata, ov_SC02_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbdf78, data, tail5] + - [0xbdfb4, .rodata, ov_SC02_003_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbdfc8, data, tail6] - [0xbdfe0, .rodata, ov_SC02_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe04c, data, tail6] + - [0xbe04c, data, tail7] - [0xbe0bc, .rodata, ov_SC02_003_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe100, .rodata, ov_SC02_003_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe148, data, tail7] + - [0xbe148, data, tail8] - [0xbe1a8, .rodata, ov_SC02_003_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe1dc, data, tail8] + - [0xbe1dc, data, tail9] - [0xbe1e0, .rodata, ov_SC02_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe1fc, data, tail9] + - [0xbe1fc, data, tail10] - [0xbe200, .rodata, ov_SC02_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe21c, data, tail10] + - [0xbe21c, data, tail11] - [0xbe240, .rodata, ov_SC02_003_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe25c, data, tail11] + - [0xbe25c, data, tail12] - [0xbe274, .rodata, ov_SC02_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe294, data, tail12] + - [0xbe294, data, tail13] - [0xbe314, .rodata, ov_SC02_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail13] + - [0xbe328, data, tail14] - [0xbe4d0, .rodata, ov_SC02_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail14] + - [0xbe648, data, tail15] - [0xbe6d8, .rodata, ov_SC02_003_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe764, data, tail15] + - [0xbe764, data, tail16] - [0xbe944, .rodata, ov_SC02_003_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail16] + - [0xbe964, data, tail17] - [0xC070C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC070F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_004.yaml b/config/splat.ov_SC02_004.yaml index fbefb75bd..c2cd1489e 100644 --- a/config/splat.ov_SC02_004.yaml +++ b/config/splat.ov_SC02_004.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_004_jr_801380E0] - [0x171f8, c, ov_SC02_004_jr_8013F350] - [0x17e80, c, ov_SC02_004_jr_8013FFD8] + - [0x184b0, c, ov_SC02_004_jr_80140608] - [0x1CA44, c, ov_SC02_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_004_after] - [0x2c2f4, c, ov_SC02_004_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x6c550, data, tail4] - [0x6c554, .rodata, ov_SC02_004_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c588, data, tail5] + - [0x6c5c4, .rodata, ov_SC02_004_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6c5d8, data, tail6] - [0x6c5f0, .rodata, ov_SC02_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c65c, data, tail6] + - [0x6c65c, data, tail7] - [0x6c6cc, .rodata, ov_SC02_004_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c710, .rodata, ov_SC02_004_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c758, data, tail7] + - [0x6c758, data, tail8] - [0x6c7b8, .rodata, ov_SC02_004_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c7ec, data, tail8] + - [0x6c7ec, data, tail9] - [0x6c7f0, .rodata, ov_SC02_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c80c, data, tail9] + - [0x6c80c, data, tail10] - [0x6c810, .rodata, ov_SC02_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c82c, data, tail10] + - [0x6c82c, data, tail11] - [0x6c850, .rodata, ov_SC02_004_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c86c, data, tail11] + - [0x6c86c, data, tail12] - [0x6c884, .rodata, ov_SC02_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c8a4, data, tail12] + - [0x6c8a4, data, tail13] - [0x6c924, .rodata, ov_SC02_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c938, data, tail13] + - [0x6c938, data, tail14] - [0x6cae0, .rodata, ov_SC02_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cc58, data, tail14] + - [0x6cc58, data, tail15] - [0x6cce8, .rodata, ov_SC02_004_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cd74, data, tail15] + - [0x6cd74, data, tail16] - [0x6E26C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6E26F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_005.yaml b/config/splat.ov_SC02_005.yaml index ba2a6a976..6802c6b7f 100644 --- a/config/splat.ov_SC02_005.yaml +++ b/config/splat.ov_SC02_005.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_005_jr_801380E0] - [0x171f8, c, ov_SC02_005_jr_8013F350] - [0x17e80, c, ov_SC02_005_jr_8013FFD8] + - [0x184b0, c, ov_SC02_005_jr_80140608] - [0x1CA44, c, ov_SC02_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_005_after] - [0x2c2f4, c, ov_SC02_005_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xba284, data, tail4] - [0xba288, .rodata, ov_SC02_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xba2bc, data, tail5] + - [0xba2f8, .rodata, ov_SC02_005_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xba30c, data, tail6] - [0xba324, .rodata, ov_SC02_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba390, data, tail6] + - [0xba390, data, tail7] - [0xba400, .rodata, ov_SC02_005_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xba444, .rodata, ov_SC02_005_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba48c, data, tail7] + - [0xba48c, data, tail8] - [0xba4ec, .rodata, ov_SC02_005_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba520, data, tail8] + - [0xba520, data, tail9] - [0xba524, .rodata, ov_SC02_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba540, data, tail9] + - [0xba540, data, tail10] - [0xba544, .rodata, ov_SC02_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba560, data, tail10] + - [0xba560, data, tail11] - [0xba584, .rodata, ov_SC02_005_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba5a0, data, tail11] + - [0xba5a0, data, tail12] - [0xba5b8, .rodata, ov_SC02_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba5d8, data, tail12] + - [0xba5d8, data, tail13] - [0xba658, .rodata, ov_SC02_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba66c, data, tail13] + - [0xba66c, data, tail14] - [0xba814, .rodata, ov_SC02_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba98c, data, tail14] + - [0xba98c, data, tail15] - [0xbaa1c, .rodata, ov_SC02_005_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbaaa8, data, tail15] + - [0xbaaa8, data, tail16] - [0xBCB00, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBCB01] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_011.yaml b/config/splat.ov_SC02_011.yaml index 1b2744ddc..8b304a298 100644 --- a/config/splat.ov_SC02_011.yaml +++ b/config/splat.ov_SC02_011.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_011_jr_801380E0] - [0x171f8, c, ov_SC02_011_jr_8013F350] - [0x17e80, c, ov_SC02_011_jr_8013FFD8] + - [0x184b0, c, ov_SC02_011_jr_80140608] - [0x1CA44, c, ov_SC02_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_011_after] - [0x2c2f4, c, ov_SC02_011_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xc13e0, data, tail4] - [0xc13e4, .rodata, ov_SC02_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc1418, data, tail5] + - [0xc1454, .rodata, ov_SC02_011_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc1468, data, tail6] - [0xc1480, .rodata, ov_SC02_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc14ec, data, tail6] + - [0xc14ec, data, tail7] - [0xc155c, .rodata, ov_SC02_011_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc15a0, .rodata, ov_SC02_011_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc15e8, data, tail7] + - [0xc15e8, data, tail8] - [0xc1648, .rodata, ov_SC02_011_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc167c, data, tail8] + - [0xc167c, data, tail9] - [0xc1680, .rodata, ov_SC02_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc169c, data, tail9] + - [0xc169c, data, tail10] - [0xc16a0, .rodata, ov_SC02_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc16bc, data, tail10] + - [0xc16bc, data, tail11] - [0xc16e0, .rodata, ov_SC02_011_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc16fc, data, tail11] + - [0xc16fc, data, tail12] - [0xc1714, .rodata, ov_SC02_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1734, data, tail12] + - [0xc1734, data, tail13] - [0xc17b4, .rodata, ov_SC02_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc17c8, data, tail13] + - [0xc17c8, data, tail14] - [0xc1970, .rodata, ov_SC02_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1ae8, data, tail14] + - [0xc1ae8, data, tail15] - [0xc1b78, .rodata, ov_SC02_011_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1c04, data, tail15] + - [0xc1c04, data, tail16] - [0xC3924, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC3927] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_015.yaml b/config/splat.ov_SC02_015.yaml index 82b222b5f..0d1ca708e 100644 --- a/config/splat.ov_SC02_015.yaml +++ b/config/splat.ov_SC02_015.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_015_jr_801380E0] - [0x171f8, c, ov_SC02_015_jr_8013F350] - [0x17e80, c, ov_SC02_015_jr_8013FFD8] + - [0x184b0, c, ov_SC02_015_jr_80140608] - [0x1CA44, c, ov_SC02_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_015_after] - [0x2c2f4, c, ov_SC02_015_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x66638, data, tail4] - [0x6663c, .rodata, ov_SC02_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66670, data, tail5] + - [0x666ac, .rodata, ov_SC02_015_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x666c0, data, tail6] - [0x666d8, .rodata, ov_SC02_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66744, data, tail6] + - [0x66744, data, tail7] - [0x667b4, .rodata, ov_SC02_015_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x667f8, .rodata, ov_SC02_015_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66840, data, tail7] + - [0x66840, data, tail8] - [0x668a0, .rodata, ov_SC02_015_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x668d4, data, tail8] + - [0x668d4, data, tail9] - [0x668d8, .rodata, ov_SC02_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x668f4, data, tail9] + - [0x668f4, data, tail10] - [0x668f8, .rodata, ov_SC02_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66914, data, tail10] + - [0x66914, data, tail11] - [0x66938, .rodata, ov_SC02_015_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66954, data, tail11] + - [0x66954, data, tail12] - [0x6696c, .rodata, ov_SC02_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6698c, data, tail12] + - [0x6698c, data, tail13] - [0x66a0c, .rodata, ov_SC02_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66a20, data, tail13] + - [0x66a20, data, tail14] - [0x66bc8, .rodata, ov_SC02_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66d40, data, tail14] + - [0x66d40, data, tail15] - [0x66dd0, .rodata, ov_SC02_015_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66e5c, data, tail15] + - [0x66e5c, data, tail16] - [0x68544, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x68547] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_016.yaml b/config/splat.ov_SC02_016.yaml index f5a858c8e..f53a81223 100644 --- a/config/splat.ov_SC02_016.yaml +++ b/config/splat.ov_SC02_016.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_016_jr_801380E0] - [0x171f8, c, ov_SC02_016_jr_8013F350] - [0x17e80, c, ov_SC02_016_jr_8013FFD8] + - [0x184b0, c, ov_SC02_016_jr_80140608] - [0x1CA44, c, ov_SC02_016_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_016_after] - [0x2c2f4, c, ov_SC02_016_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8a218, data, tail4] - [0x8a21c, .rodata, ov_SC02_016_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8a250, data, tail5] + - [0x8a28c, .rodata, ov_SC02_016_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8a2a0, data, tail6] - [0x8a2b8, .rodata, ov_SC02_016_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a324, data, tail6] + - [0x8a324, data, tail7] - [0x8a394, .rodata, ov_SC02_016_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8a3d8, .rodata, ov_SC02_016_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a420, data, tail7] + - [0x8a420, data, tail8] - [0x8a480, .rodata, ov_SC02_016_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a4b4, data, tail8] + - [0x8a4b4, data, tail9] - [0x8a4b8, .rodata, ov_SC02_016_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a4d4, data, tail9] + - [0x8a4d4, data, tail10] - [0x8a4d8, .rodata, ov_SC02_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a4f4, data, tail10] + - [0x8a4f4, data, tail11] - [0x8a518, .rodata, ov_SC02_016_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a534, data, tail11] + - [0x8a534, data, tail12] - [0x8a54c, .rodata, ov_SC02_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a56c, data, tail12] + - [0x8a56c, data, tail13] - [0x8a5ec, .rodata, ov_SC02_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a600, data, tail13] + - [0x8a600, data, tail14] - [0x8a7a8, .rodata, ov_SC02_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a920, data, tail14] + - [0x8a920, data, tail15] - [0x8a9b0, .rodata, ov_SC02_016_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8aa3c, data, tail15] + - [0x8aa3c, data, tail16] - [0x8aa54, .rodata, ov_SC02_016_jr_8017DC70] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8aa74, data, tail16] + - [0x8aa74, data, tail17] - [0x8C97C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8C97F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_017.yaml b/config/splat.ov_SC02_017.yaml index 070a07354..50f86d59d 100644 --- a/config/splat.ov_SC02_017.yaml +++ b/config/splat.ov_SC02_017.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_017_jr_801380E0] - [0x171f8, c, ov_SC02_017_jr_8013F350] - [0x17e80, c, ov_SC02_017_jr_8013FFD8] + - [0x184b0, c, ov_SC02_017_jr_80140608] - [0x1CA44, c, ov_SC02_017_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_017_after] - [0x2c2f4, c, ov_SC02_017_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xc5a38, data, tail4] - [0xc5a3c, .rodata, ov_SC02_017_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc5a70, data, tail5] + - [0xc5aac, .rodata, ov_SC02_017_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc5ac0, data, tail6] - [0xc5ad8, .rodata, ov_SC02_017_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5b44, data, tail6] + - [0xc5b44, data, tail7] - [0xc5bb4, .rodata, ov_SC02_017_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc5bf8, .rodata, ov_SC02_017_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5c40, data, tail7] + - [0xc5c40, data, tail8] - [0xc5ca0, .rodata, ov_SC02_017_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5cd4, data, tail8] + - [0xc5cd4, data, tail9] - [0xc5cd8, .rodata, ov_SC02_017_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5cf4, data, tail9] + - [0xc5cf4, data, tail10] - [0xc5cf8, .rodata, ov_SC02_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5d14, data, tail10] + - [0xc5d14, data, tail11] - [0xc5d38, .rodata, ov_SC02_017_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5d54, data, tail11] + - [0xc5d54, data, tail12] - [0xc5d6c, .rodata, ov_SC02_017_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5d8c, data, tail12] + - [0xc5d8c, data, tail13] - [0xc5e0c, .rodata, ov_SC02_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5e20, data, tail13] + - [0xc5e20, data, tail14] - [0xc5fc8, .rodata, ov_SC02_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc6140, data, tail14] + - [0xc6140, data, tail15] - [0xc61d0, .rodata, ov_SC02_017_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc625c, data, tail15] + - [0xc625c, data, tail16] - [0xc6274, .rodata, ov_SC02_017_jr_8017DF34] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc6294, data, tail16] + - [0xc6294, data, tail17] - [0xC7BDC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC7BDF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_021.yaml b/config/splat.ov_SC02_021.yaml index 7deb88ba8..6256ca76b 100644 --- a/config/splat.ov_SC02_021.yaml +++ b/config/splat.ov_SC02_021.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_021_jr_801380E0] - [0x171f8, c, ov_SC02_021_jr_8013F350] - [0x17e80, c, ov_SC02_021_jr_8013FFD8] + - [0x184b0, c, ov_SC02_021_jr_80140608] - [0x1CA44, c, ov_SC02_021_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_021_after] - [0x2c2f4, c, ov_SC02_021_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x68fb4, data, tail4] - [0x68fb8, .rodata, ov_SC02_021_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68fec, data, tail5] + - [0x69028, .rodata, ov_SC02_021_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6903c, data, tail6] - [0x69054, .rodata, ov_SC02_021_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x690c0, data, tail6] + - [0x690c0, data, tail7] - [0x69130, .rodata, ov_SC02_021_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x69174, .rodata, ov_SC02_021_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x691bc, data, tail7] + - [0x691bc, data, tail8] - [0x6921c, .rodata, ov_SC02_021_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69250, data, tail8] + - [0x69250, data, tail9] - [0x69254, .rodata, ov_SC02_021_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69270, data, tail9] + - [0x69270, data, tail10] - [0x69274, .rodata, ov_SC02_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69290, data, tail10] + - [0x69290, data, tail11] - [0x692b4, .rodata, ov_SC02_021_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x692d0, data, tail11] + - [0x692d0, data, tail12] - [0x692e8, .rodata, ov_SC02_021_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69308, data, tail12] + - [0x69308, data, tail13] - [0x69388, .rodata, ov_SC02_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6939c, data, tail13] + - [0x6939c, data, tail14] - [0x69544, .rodata, ov_SC02_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x696bc, data, tail14] + - [0x696bc, data, tail15] - [0x6974c, .rodata, ov_SC02_021_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x697d8, data, tail15] + - [0x697d8, data, tail16] - [0x697f0, .rodata, ov_SC02_021_jr_8017C294] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69810, data, tail16] + - [0x69810, data, tail17] - [0x6B744, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6B747] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_026.yaml b/config/splat.ov_SC02_026.yaml index 6aaf700bd..da4a09522 100644 --- a/config/splat.ov_SC02_026.yaml +++ b/config/splat.ov_SC02_026.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_026_jr_801380E0] - [0x171f8, c, ov_SC02_026_jr_8013F350] - [0x17e80, c, ov_SC02_026_jr_8013FFD8] + - [0x184b0, c, ov_SC02_026_jr_80140608] - [0x1CA44, c, ov_SC02_026_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_026_after] - [0x2c2f4, c, ov_SC02_026_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa63e8, data, tail4] - [0xa63ec, .rodata, ov_SC02_026_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa6420, data, tail5] + - [0xa645c, .rodata, ov_SC02_026_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6470, data, tail6] - [0xa6488, .rodata, ov_SC02_026_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa64f4, data, tail6] + - [0xa64f4, data, tail7] - [0xa6564, .rodata, ov_SC02_026_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa65a8, .rodata, ov_SC02_026_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa65f0, data, tail7] + - [0xa65f0, data, tail8] - [0xa6650, .rodata, ov_SC02_026_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6684, data, tail8] + - [0xa6684, data, tail9] - [0xa6688, .rodata, ov_SC02_026_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa66a4, data, tail9] + - [0xa66a4, data, tail10] - [0xa66a8, .rodata, ov_SC02_026_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa66c4, data, tail10] + - [0xa66c4, data, tail11] - [0xa66e8, .rodata, ov_SC02_026_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6704, data, tail11] + - [0xa6704, data, tail12] - [0xa671c, .rodata, ov_SC02_026_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa673c, data, tail12] + - [0xa673c, data, tail13] - [0xa67bc, .rodata, ov_SC02_026_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa67d0, data, tail13] + - [0xa67d0, data, tail14] - [0xa6978, .rodata, ov_SC02_026_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6af0, data, tail14] + - [0xa6af0, data, tail15] - [0xa6b80, .rodata, ov_SC02_026_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6c0c, data, tail15] + - [0xa6c0c, data, tail16] - [0xa6c24, .rodata, ov_SC02_026_jr_8017C180] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6c44, data, tail16] + - [0xa6c44, data, tail17] - [0xA8164, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA8167] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_027.yaml b/config/splat.ov_SC02_027.yaml index c4b501cdf..98763665f 100644 --- a/config/splat.ov_SC02_027.yaml +++ b/config/splat.ov_SC02_027.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_027_jr_801380E0] - [0x171f8, c, ov_SC02_027_jr_8013F350] - [0x17e80, c, ov_SC02_027_jr_8013FFD8] + - [0x184b0, c, ov_SC02_027_jr_80140608] - [0x1CA44, c, ov_SC02_027_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_027_after] - [0x2c2f4, c, ov_SC02_027_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xb0154, data, tail4] - [0xb0158, .rodata, ov_SC02_027_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb018c, data, tail5] + - [0xb01c8, .rodata, ov_SC02_027_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb01dc, data, tail6] - [0xb01f4, .rodata, ov_SC02_027_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0260, data, tail6] + - [0xb0260, data, tail7] - [0xb02d0, .rodata, ov_SC02_027_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb0314, .rodata, ov_SC02_027_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb035c, data, tail7] + - [0xb035c, data, tail8] - [0xb03bc, .rodata, ov_SC02_027_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb03f0, data, tail8] + - [0xb03f0, data, tail9] - [0xb03f4, .rodata, ov_SC02_027_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0410, data, tail9] + - [0xb0410, data, tail10] - [0xb0414, .rodata, ov_SC02_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0430, data, tail10] + - [0xb0430, data, tail11] - [0xb0454, .rodata, ov_SC02_027_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0470, data, tail11] + - [0xb0470, data, tail12] - [0xb0488, .rodata, ov_SC02_027_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb04a8, data, tail12] + - [0xb04a8, data, tail13] - [0xb0528, .rodata, ov_SC02_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb053c, data, tail13] + - [0xb053c, data, tail14] - [0xb06e4, .rodata, ov_SC02_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb085c, data, tail14] + - [0xb085c, data, tail15] - [0xb08ec, .rodata, ov_SC02_027_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0978, data, tail15] + - [0xb0978, data, tail16] - [0xb0990, .rodata, ov_SC02_027_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb09b0, data, tail16] + - [0xb09b0, data, tail17] - [0xB28E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xB28E7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_028.yaml b/config/splat.ov_SC02_028.yaml index 676040ad9..871370794 100644 --- a/config/splat.ov_SC02_028.yaml +++ b/config/splat.ov_SC02_028.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_028_jr_801380E0] - [0x171f8, c, ov_SC02_028_jr_8013F350] - [0x17e80, c, ov_SC02_028_jr_8013FFD8] + - [0x184b0, c, ov_SC02_028_jr_80140608] - [0x1CA44, c, ov_SC02_028_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_028_after] - [0x2c2f4, c, ov_SC02_028_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa90d8, data, tail4] - [0xa90dc, .rodata, ov_SC02_028_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9110, data, tail5] + - [0xa914c, .rodata, ov_SC02_028_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa9160, data, tail6] - [0xa9178, .rodata, ov_SC02_028_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa91e4, data, tail6] + - [0xa91e4, data, tail7] - [0xa9254, .rodata, ov_SC02_028_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9298, .rodata, ov_SC02_028_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa92e0, data, tail7] + - [0xa92e0, data, tail8] - [0xa9340, .rodata, ov_SC02_028_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9374, data, tail8] + - [0xa9374, data, tail9] - [0xa9378, .rodata, ov_SC02_028_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9394, data, tail9] + - [0xa9394, data, tail10] - [0xa9398, .rodata, ov_SC02_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa93b4, data, tail10] + - [0xa93b4, data, tail11] - [0xa93d8, .rodata, ov_SC02_028_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa93f4, data, tail11] + - [0xa93f4, data, tail12] - [0xa940c, .rodata, ov_SC02_028_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa942c, data, tail12] + - [0xa942c, data, tail13] - [0xa94ac, .rodata, ov_SC02_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa94c0, data, tail13] + - [0xa94c0, data, tail14] - [0xa9668, .rodata, ov_SC02_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97e0, data, tail14] + - [0xa97e0, data, tail15] - [0xa9870, .rodata, ov_SC02_028_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa98fc, data, tail15] + - [0xa98fc, data, tail16] - [0xa9914, .rodata, ov_SC02_028_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9934, data, tail16] + - [0xa9934, data, tail17] - [0xAB4E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAB4E7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_031.yaml b/config/splat.ov_SC02_031.yaml index 6fe5b3cd4..d6db14fc4 100644 --- a/config/splat.ov_SC02_031.yaml +++ b/config/splat.ov_SC02_031.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_031_jr_801380E0] - [0x171f8, c, ov_SC02_031_jr_8013F350] - [0x17e80, c, ov_SC02_031_jr_8013FFD8] + - [0x184b0, c, ov_SC02_031_jr_80140608] - [0x1CA44, c, ov_SC02_031_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_031_after] - [0x2c2f4, c, ov_SC02_031_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x8d8d4, data, tail4] - [0x8d8d8, .rodata, ov_SC02_031_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8d90c, data, tail5] + - [0x8d948, .rodata, ov_SC02_031_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8d95c, data, tail6] - [0x8d974, .rodata, ov_SC02_031_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8d9e0, data, tail6] + - [0x8d9e0, data, tail7] - [0x8da50, .rodata, ov_SC02_031_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8da94, .rodata, ov_SC02_031_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dadc, data, tail7] + - [0x8dadc, data, tail8] - [0x8db3c, .rodata, ov_SC02_031_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8db70, data, tail8] + - [0x8db70, data, tail9] - [0x8db74, .rodata, ov_SC02_031_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8db90, data, tail9] + - [0x8db90, data, tail10] - [0x8db94, .rodata, ov_SC02_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dbb0, data, tail10] + - [0x8dbb0, data, tail11] - [0x8dbd4, .rodata, ov_SC02_031_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dbf0, data, tail11] + - [0x8dbf0, data, tail12] - [0x8dc08, .rodata, ov_SC02_031_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dc28, data, tail12] + - [0x8dc28, data, tail13] - [0x8dca8, .rodata, ov_SC02_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dcbc, data, tail13] + - [0x8dcbc, data, tail14] - [0x8de64, .rodata, ov_SC02_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dfdc, data, tail14] + - [0x8dfdc, data, tail15] - [0x8e06c, .rodata, ov_SC02_031_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8e0f8, data, tail15] + - [0x8e0f8, data, tail16] - [0x8F9B4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8F9B7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_035.yaml b/config/splat.ov_SC02_035.yaml index 7e4609cc2..590348077 100644 --- a/config/splat.ov_SC02_035.yaml +++ b/config/splat.ov_SC02_035.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_035_jr_801380E0] - [0x171f8, c, ov_SC02_035_jr_8013F350] - [0x17e80, c, ov_SC02_035_jr_8013FFD8] + - [0x184b0, c, ov_SC02_035_jr_80140608] - [0x1CA44, c, ov_SC02_035_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_035_after] - [0x2c2f4, c, ov_SC02_035_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x94b9c, data, tail4] - [0x94ba0, .rodata, ov_SC02_035_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x94bd4, data, tail5] + - [0x94c10, .rodata, ov_SC02_035_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x94c24, data, tail6] - [0x94c3c, .rodata, ov_SC02_035_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94ca8, data, tail6] + - [0x94ca8, data, tail7] - [0x94d18, .rodata, ov_SC02_035_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x94d5c, .rodata, ov_SC02_035_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94da4, data, tail7] + - [0x94da4, data, tail8] - [0x94e04, .rodata, ov_SC02_035_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94e38, data, tail8] + - [0x94e38, data, tail9] - [0x94e3c, .rodata, ov_SC02_035_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94e58, data, tail9] + - [0x94e58, data, tail10] - [0x94e5c, .rodata, ov_SC02_035_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94e78, data, tail10] + - [0x94e78, data, tail11] - [0x94e9c, .rodata, ov_SC02_035_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94eb8, data, tail11] + - [0x94eb8, data, tail12] - [0x94ed0, .rodata, ov_SC02_035_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94ef0, data, tail12] + - [0x94ef0, data, tail13] - [0x94f70, .rodata, ov_SC02_035_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94f84, data, tail13] + - [0x94f84, data, tail14] - [0x9512c, .rodata, ov_SC02_035_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x952a4, data, tail14] + - [0x952a4, data, tail15] - [0x95334, .rodata, ov_SC02_035_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x953c0, data, tail15] + - [0x953c0, data, tail16] - [0x953d8, .rodata, ov_SC02_035_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x953f8, data, tail16] + - [0x953f8, data, tail17] - [0x968EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x968EF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_039.yaml b/config/splat.ov_SC02_039.yaml index 599263283..9e453b473 100644 --- a/config/splat.ov_SC02_039.yaml +++ b/config/splat.ov_SC02_039.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_039_jr_801380E0] - [0x171f8, c, ov_SC02_039_jr_8013F350] - [0x17e80, c, ov_SC02_039_jr_8013FFD8] + - [0x184b0, c, ov_SC02_039_jr_80140608] - [0x1CA44, c, ov_SC02_039_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_039_after] - [0x2c2f4, c, ov_SC02_039_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x76f88, data, tail4] - [0x76f8c, .rodata, ov_SC02_039_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76fc0, data, tail5] + - [0x76ffc, .rodata, ov_SC02_039_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77010, data, tail6] - [0x77028, .rodata, ov_SC02_039_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77094, data, tail6] + - [0x77094, data, tail7] - [0x77104, .rodata, ov_SC02_039_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77148, .rodata, ov_SC02_039_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77190, data, tail7] + - [0x77190, data, tail8] - [0x771f0, .rodata, ov_SC02_039_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77224, data, tail8] + - [0x77224, data, tail9] - [0x77228, .rodata, ov_SC02_039_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77244, data, tail9] + - [0x77244, data, tail10] - [0x77248, .rodata, ov_SC02_039_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77264, data, tail10] + - [0x77264, data, tail11] - [0x77288, .rodata, ov_SC02_039_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x772a4, data, tail11] + - [0x772a4, data, tail12] - [0x772bc, .rodata, ov_SC02_039_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x772dc, data, tail12] + - [0x772dc, data, tail13] - [0x7735c, .rodata, ov_SC02_039_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77370, data, tail13] + - [0x77370, data, tail14] - [0x77518, .rodata, ov_SC02_039_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77690, data, tail14] + - [0x77690, data, tail15] - [0x77720, .rodata, ov_SC02_039_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x777ac, data, tail15] + - [0x777ac, data, tail16] - [0x777c4, .rodata, ov_SC02_039_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x777e4, data, tail16] + - [0x777e4, data, tail17] - [0x78CA4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x78CA7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_041.yaml b/config/splat.ov_SC02_041.yaml index b104545e5..7138da031 100644 --- a/config/splat.ov_SC02_041.yaml +++ b/config/splat.ov_SC02_041.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC02_041_jr_801380E0] - [0x171f8, c, ov_SC02_041_jr_8013F350] - [0x17e80, c, ov_SC02_041_jr_8013FFD8] + - [0x184b0, c, ov_SC02_041_jr_80140608] - [0x1CA44, c, ov_SC02_041_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_041_after] - [0x2c2f4, c, ov_SC02_041_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8f2f4, data, tail4] - [0x8f2f8, .rodata, ov_SC02_041_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f32c, data, tail5] + - [0x8f368, .rodata, ov_SC02_041_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f37c, data, tail6] - [0x8f394, .rodata, ov_SC02_041_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f400, data, tail6] + - [0x8f400, data, tail7] - [0x8f470, .rodata, ov_SC02_041_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f4b4, .rodata, ov_SC02_041_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f4fc, data, tail7] + - [0x8f4fc, data, tail8] - [0x8f55c, .rodata, ov_SC02_041_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f590, data, tail8] + - [0x8f590, data, tail9] - [0x8f594, .rodata, ov_SC02_041_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f5b0, data, tail9] + - [0x8f5b0, data, tail10] - [0x8f5b4, .rodata, ov_SC02_041_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f5d0, data, tail10] + - [0x8f5d0, data, tail11] - [0x8f5f4, .rodata, ov_SC02_041_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f610, data, tail11] + - [0x8f610, data, tail12] - [0x8f628, .rodata, ov_SC02_041_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f648, data, tail12] + - [0x8f648, data, tail13] - [0x8f6c8, .rodata, ov_SC02_041_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f6dc, data, tail13] + - [0x8f6dc, data, tail14] - [0x8f884, .rodata, ov_SC02_041_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f9fc, data, tail14] + - [0x8f9fc, data, tail15] - [0x8fa8c, .rodata, ov_SC02_041_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb18, data, tail15] + - [0x8fb18, data, tail16] - [0x8fb30, .rodata, ov_SC02_041_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb50, data, tail16] + - [0x8fb50, data, tail17] - [0x9157C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9157F] # 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_001.yaml b/config/splat.ov_SC03_001.yaml index 0b9a498aa..f8aa36577 100644 --- a/config/splat.ov_SC03_001.yaml +++ b/config/splat.ov_SC03_001.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_001_jr_801380E0] - [0x171f8, c, ov_SC03_001_jr_8013F350] - [0x17e80, c, ov_SC03_001_jr_8013FFD8] + - [0x184b0, c, ov_SC03_001_jr_80140608] - [0x1CA44, c, ov_SC03_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_001_after] - [0x2c2f4, c, ov_SC03_001_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xc4414, data, tail4] - [0xc4418, .rodata, ov_SC03_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc444c, data, tail5] + - [0xc4488, .rodata, ov_SC03_001_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc449c, data, tail6] - [0xc44b4, .rodata, ov_SC03_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4520, data, tail6] + - [0xc4520, data, tail7] - [0xc4590, .rodata, ov_SC03_001_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc45d4, .rodata, ov_SC03_001_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc461c, data, tail7] + - [0xc461c, data, tail8] - [0xc467c, .rodata, ov_SC03_001_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc46b0, data, tail8] + - [0xc46b0, data, tail9] - [0xc46b4, .rodata, ov_SC03_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc46d0, data, tail9] + - [0xc46d0, data, tail10] - [0xc46d4, .rodata, ov_SC03_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc46f0, data, tail10] + - [0xc46f0, data, tail11] - [0xc4714, .rodata, ov_SC03_001_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4730, data, tail11] + - [0xc4730, data, tail12] - [0xc4748, .rodata, ov_SC03_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4768, data, tail12] + - [0xc4768, data, tail13] - [0xc47e8, .rodata, ov_SC03_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc47fc, data, tail13] + - [0xc47fc, data, tail14] - [0xc49a4, .rodata, ov_SC03_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4b1c, data, tail14] + - [0xc4b1c, data, tail15] - [0xc4bac, .rodata, ov_SC03_001_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4c38, data, tail15] + - [0xc4c38, data, tail16] - [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_002.yaml b/config/splat.ov_SC03_002.yaml index 5bc9d8a9e..93253e174 100644 --- a/config/splat.ov_SC03_002.yaml +++ b/config/splat.ov_SC03_002.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_002_jr_801380E0] - [0x171f8, c, ov_SC03_002_jr_8013F350] - [0x17e80, c, ov_SC03_002_jr_8013FFD8] + - [0x184b0, c, ov_SC03_002_jr_80140608] - [0x1CA44, c, ov_SC03_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_002_after] - [0x2c2f4, c, ov_SC03_002_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa1970, data, tail4] - [0xa1974, .rodata, ov_SC03_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa19a8, data, tail5] + - [0xa19e4, .rodata, ov_SC03_002_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa19f8, data, tail6] - [0xa1a10, .rodata, ov_SC03_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1a7c, data, tail6] + - [0xa1a7c, data, tail7] - [0xa1aec, .rodata, ov_SC03_002_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1b30, .rodata, ov_SC03_002_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1b78, data, tail7] + - [0xa1b78, data, tail8] - [0xa1bd8, .rodata, ov_SC03_002_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1c0c, data, tail8] + - [0xa1c0c, data, tail9] - [0xa1c10, .rodata, ov_SC03_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1c2c, data, tail9] + - [0xa1c2c, data, tail10] - [0xa1c30, .rodata, ov_SC03_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1c4c, data, tail10] + - [0xa1c4c, data, tail11] - [0xa1c70, .rodata, ov_SC03_002_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1c8c, data, tail11] + - [0xa1c8c, data, tail12] - [0xa1ca4, .rodata, ov_SC03_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1cc4, data, tail12] + - [0xa1cc4, data, tail13] - [0xa1d44, .rodata, ov_SC03_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1d58, data, tail13] + - [0xa1d58, data, tail14] - [0xa1f00, .rodata, ov_SC03_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2078, data, tail14] + - [0xa2078, data, tail15] - [0xa2108, .rodata, ov_SC03_002_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2194, data, tail15] + - [0xa2194, data, tail16] - [0xa21ac, .rodata, ov_SC03_002_jr_8017D604] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa21cc, data, tail16] + - [0xa21cc, data, tail17] - [0xA39F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA39F7] # 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_003.yaml b/config/splat.ov_SC03_003.yaml index d7046e112..3e1a66045 100644 --- a/config/splat.ov_SC03_003.yaml +++ b/config/splat.ov_SC03_003.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_003_jr_801380E0] - [0x171f8, c, ov_SC03_003_jr_8013F350] - [0x17e80, c, ov_SC03_003_jr_8013FFD8] + - [0x184b0, c, ov_SC03_003_jr_80140608] - [0x1CA44, c, ov_SC03_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_003_after] - [0x2c2f4, c, ov_SC03_003_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x65cf0, data, tail4] - [0x65cf4, .rodata, ov_SC03_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65d28, data, tail5] + - [0x65d64, .rodata, ov_SC03_003_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65d78, data, tail6] - [0x65d90, .rodata, ov_SC03_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65dfc, data, tail6] + - [0x65dfc, data, tail7] - [0x65e6c, .rodata, ov_SC03_003_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65eb0, .rodata, ov_SC03_003_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65ef8, data, tail7] + - [0x65ef8, data, tail8] - [0x65f58, .rodata, ov_SC03_003_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f8c, data, tail8] + - [0x65f8c, data, tail9] - [0x65f90, .rodata, ov_SC03_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fac, data, tail9] + - [0x65fac, data, tail10] - [0x65fb0, .rodata, ov_SC03_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fcc, data, tail10] + - [0x65fcc, data, tail11] - [0x65ff0, .rodata, ov_SC03_003_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6600c, data, tail11] + - [0x6600c, data, tail12] - [0x66024, .rodata, ov_SC03_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66044, data, tail12] + - [0x66044, data, tail13] - [0x660c4, .rodata, ov_SC03_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x660d8, data, tail13] + - [0x660d8, data, tail14] - [0x66280, .rodata, ov_SC03_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663f8, data, tail14] + - [0x663f8, data, tail15] - [0x66488, .rodata, ov_SC03_003_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66514, data, tail15] + - [0x66514, data, tail16] - [0x67A24, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x67A25] # 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_006.yaml b/config/splat.ov_SC03_006.yaml index 2e1c1450d..92b3095de 100644 --- a/config/splat.ov_SC03_006.yaml +++ b/config/splat.ov_SC03_006.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_006_jr_801380E0] - [0x171f8, c, ov_SC03_006_jr_8013F350] - [0x17e80, c, ov_SC03_006_jr_8013FFD8] + - [0x184b0, c, ov_SC03_006_jr_80140608] - [0x1CA44, c, ov_SC03_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_006_after] - [0x2c2f4, c, ov_SC03_006_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xcd5ac, data, tail4] - [0xcd5b0, .rodata, ov_SC03_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcd5e4, data, tail5] + - [0xcd620, .rodata, ov_SC03_006_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xcd634, data, tail6] - [0xcd64c, .rodata, ov_SC03_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd6b8, data, tail6] + - [0xcd6b8, data, tail7] - [0xcd728, .rodata, ov_SC03_006_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcd76c, .rodata, ov_SC03_006_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd7b4, data, tail7] + - [0xcd7b4, data, tail8] - [0xcd814, .rodata, ov_SC03_006_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd848, data, tail8] + - [0xcd848, data, tail9] - [0xcd84c, .rodata, ov_SC03_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd868, data, tail9] + - [0xcd868, data, tail10] - [0xcd86c, .rodata, ov_SC03_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd888, data, tail10] + - [0xcd888, data, tail11] - [0xcd8ac, .rodata, ov_SC03_006_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd8c8, data, tail11] + - [0xcd8c8, data, tail12] - [0xcd8e0, .rodata, ov_SC03_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd900, data, tail12] + - [0xcd900, data, tail13] - [0xcd980, .rodata, ov_SC03_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd994, data, tail13] + - [0xcd994, data, tail14] - [0xcdb3c, .rodata, ov_SC03_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcdcb4, data, tail14] + - [0xcdcb4, data, tail15] - [0xcdd44, .rodata, ov_SC03_006_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcddd0, data, tail15] + - [0xcddd0, data, tail16] - [0xCF75C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCF75F] # 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_007.yaml b/config/splat.ov_SC03_007.yaml index 7856a5fb7..c25597b29 100644 --- a/config/splat.ov_SC03_007.yaml +++ b/config/splat.ov_SC03_007.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_007_jr_801380E0] - [0x171f8, c, ov_SC03_007_jr_8013F350] - [0x17e80, c, ov_SC03_007_jr_8013FFD8] + - [0x184b0, c, ov_SC03_007_jr_80140608] - [0x1CA44, c, ov_SC03_007_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_007_after] - [0x2c2f4, c, ov_SC03_007_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xbff34, data, tail4] - [0xbff38, .rodata, ov_SC03_007_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbff6c, data, tail5] + - [0xbffa8, .rodata, ov_SC03_007_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbffbc, data, tail6] - [0xbffd4, .rodata, ov_SC03_007_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0040, data, tail6] + - [0xc0040, data, tail7] - [0xc00b0, .rodata, ov_SC03_007_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc00f4, .rodata, ov_SC03_007_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc013c, data, tail7] + - [0xc013c, data, tail8] - [0xc019c, .rodata, ov_SC03_007_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc01d0, data, tail8] + - [0xc01d0, data, tail9] - [0xc01d4, .rodata, ov_SC03_007_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc01f0, data, tail9] + - [0xc01f0, data, tail10] - [0xc01f4, .rodata, ov_SC03_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0210, data, tail10] + - [0xc0210, data, tail11] - [0xc0234, .rodata, ov_SC03_007_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0250, data, tail11] + - [0xc0250, data, tail12] - [0xc0268, .rodata, ov_SC03_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0288, data, tail12] + - [0xc0288, data, tail13] - [0xc0308, .rodata, ov_SC03_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc031c, data, tail13] + - [0xc031c, data, tail14] - [0xc04c4, .rodata, ov_SC03_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc063c, data, tail14] + - [0xc063c, data, tail15] - [0xc06cc, .rodata, ov_SC03_007_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0758, data, tail15] + - [0xc0758, data, tail16] - [0xC316C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC316F] # 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_010.yaml b/config/splat.ov_SC03_010.yaml index 9c7479277..576d7a72d 100644 --- a/config/splat.ov_SC03_010.yaml +++ b/config/splat.ov_SC03_010.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_010_jr_801380E0] - [0x171f8, c, ov_SC03_010_jr_8013F350] - [0x17e80, c, ov_SC03_010_jr_8013FFD8] + - [0x184b0, c, ov_SC03_010_jr_80140608] - [0x1CA44, c, ov_SC03_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_010_after] - [0x2c2f4, c, ov_SC03_010_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x76210, data, tail4] - [0x76214, .rodata, ov_SC03_010_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76248, data, tail5] + - [0x76284, .rodata, ov_SC03_010_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x76298, data, tail6] - [0x762b0, .rodata, ov_SC03_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7631c, data, tail6] + - [0x7631c, data, tail7] - [0x7638c, .rodata, ov_SC03_010_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x763d0, .rodata, ov_SC03_010_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76418, data, tail7] + - [0x76418, data, tail8] - [0x76478, .rodata, ov_SC03_010_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764ac, data, tail8] + - [0x764ac, data, tail9] - [0x764b0, .rodata, ov_SC03_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764cc, data, tail9] + - [0x764cc, data, tail10] - [0x764d0, .rodata, ov_SC03_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764ec, data, tail10] + - [0x764ec, data, tail11] - [0x76510, .rodata, ov_SC03_010_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7652c, data, tail11] + - [0x7652c, data, tail12] - [0x76544, .rodata, ov_SC03_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76564, data, tail12] + - [0x76564, data, tail13] - [0x765e4, .rodata, ov_SC03_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x765f8, data, tail13] + - [0x765f8, data, tail14] - [0x767a0, .rodata, ov_SC03_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76918, data, tail14] + - [0x76918, data, tail15] - [0x769a8, .rodata, ov_SC03_010_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76a34, data, tail15] + - [0x76a34, data, tail16] - [0x78074, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x78077] # 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_011.yaml b/config/splat.ov_SC03_011.yaml index 90f93af08..e5f2db469 100644 --- a/config/splat.ov_SC03_011.yaml +++ b/config/splat.ov_SC03_011.yaml @@ -97,6 +97,7 @@ segments: - [0x2b88, c, ov_SC03_011_jr_8012ACE0] - [0xff88, c, ov_SC03_011_jr_801380E0] - [0x171f8, c, ov_SC03_011_jr_8013F350] + - [0x184b0, c, ov_SC03_011_jr_80140608] - [0x1CA44, c, ov_SC03_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_011_after] - [0x2c2f4, c, ov_SC03_011_jr_8015444C] @@ -118,29 +119,31 @@ segments: - [0x77e40, data, tail3] - [0x7844c, .rodata, ov_SC03_011_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x78480, data, tail4] + - [0x784f4, .rodata, ov_SC03_011_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x78508, data, tail5] - [0x78520, .rodata, ov_SC03_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7858c, data, tail5] + - [0x7858c, data, tail6] - [0x785fc, .rodata, ov_SC03_011_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x78640, .rodata, ov_SC03_011_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78688, data, tail6] + - [0x78688, data, tail7] - [0x786e8, .rodata, ov_SC03_011_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7871c, data, tail7] + - [0x7871c, data, tail8] - [0x78720, .rodata, ov_SC03_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7873c, data, tail8] + - [0x7873c, data, tail9] - [0x78740, .rodata, ov_SC03_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7875c, data, tail9] + - [0x7875c, data, tail10] - [0x78780, .rodata, ov_SC03_011_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7879c, data, tail10] + - [0x7879c, data, tail11] - [0x787b4, .rodata, ov_SC03_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x787d4, data, tail11] + - [0x787d4, data, tail12] - [0x78854, .rodata, ov_SC03_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78868, data, tail12] + - [0x78868, data, tail13] - [0x78a10, .rodata, ov_SC03_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78b88, data, tail13] + - [0x78b88, data, tail14] - [0x78c18, .rodata, ov_SC03_011_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78ca4, data, tail14] + - [0x78ca4, data, tail15] - [0x78cbc, .rodata, ov_SC03_011_jr_8017C730] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78cdc, data, tail15] + - [0x78cdc, data, tail16] - [0x7A2A8, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7A2AB] # 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_012.yaml b/config/splat.ov_SC03_012.yaml index 17c70e30e..581a55869 100644 --- a/config/splat.ov_SC03_012.yaml +++ b/config/splat.ov_SC03_012.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_012_jr_801380E0] - [0x171f8, c, ov_SC03_012_jr_8013F350] - [0x17e80, c, ov_SC03_012_jr_8013FFD8] + - [0x184b0, c, ov_SC03_012_jr_80140608] - [0x1CA44, c, ov_SC03_012_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_012_after] - [0x2c2f4, c, ov_SC03_012_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x6b2dc, data, tail4] - [0x6b2e0, .rodata, ov_SC03_012_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b314, data, tail5] + - [0x6b350, .rodata, ov_SC03_012_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b364, data, tail6] - [0x6b37c, .rodata, ov_SC03_012_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b3e8, data, tail6] + - [0x6b3e8, data, tail7] - [0x6b458, .rodata, ov_SC03_012_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b49c, .rodata, ov_SC03_012_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b4e4, data, tail7] + - [0x6b4e4, data, tail8] - [0x6b544, .rodata, ov_SC03_012_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b578, data, tail8] + - [0x6b578, data, tail9] - [0x6b57c, .rodata, ov_SC03_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b598, data, tail9] + - [0x6b598, data, tail10] - [0x6b59c, .rodata, ov_SC03_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5b8, data, tail10] + - [0x6b5b8, data, tail11] - [0x6b5dc, .rodata, ov_SC03_012_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5f8, data, tail11] + - [0x6b5f8, data, tail12] - [0x6b610, .rodata, ov_SC03_012_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b630, data, tail12] + - [0x6b630, data, tail13] - [0x6b6b0, .rodata, ov_SC03_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c4, data, tail13] + - [0x6b6c4, data, tail14] - [0x6b86c, .rodata, ov_SC03_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e4, data, tail14] + - [0x6b9e4, data, tail15] - [0x6ba74, .rodata, ov_SC03_012_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6bb00, data, tail15] + - [0x6bb00, data, tail16] - [0x6D004, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6D007] # 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_013.yaml b/config/splat.ov_SC03_013.yaml index cc4d5deff..85a11f5b7 100644 --- a/config/splat.ov_SC03_013.yaml +++ b/config/splat.ov_SC03_013.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_013_jr_801380E0] - [0x171f8, c, ov_SC03_013_jr_8013F350] - [0x17e80, c, ov_SC03_013_jr_8013FFD8] + - [0x184b0, c, ov_SC03_013_jr_80140608] - [0x1CA44, c, ov_SC03_013_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_013_after] - [0x2c2f4, c, ov_SC03_013_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x83574, data, tail4] - [0x83578, .rodata, ov_SC03_013_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x835ac, data, tail5] + - [0x835e8, .rodata, ov_SC03_013_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x835fc, data, tail6] - [0x83614, .rodata, ov_SC03_013_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83680, data, tail6] + - [0x83680, data, tail7] - [0x836f0, .rodata, ov_SC03_013_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x83734, .rodata, ov_SC03_013_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8377c, data, tail7] + - [0x8377c, data, tail8] - [0x837dc, .rodata, ov_SC03_013_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83810, data, tail8] + - [0x83810, data, tail9] - [0x83814, .rodata, ov_SC03_013_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83830, data, tail9] + - [0x83830, data, tail10] - [0x83834, .rodata, ov_SC03_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83850, data, tail10] + - [0x83850, data, tail11] - [0x83874, .rodata, ov_SC03_013_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83890, data, tail11] + - [0x83890, data, tail12] - [0x838a8, .rodata, ov_SC03_013_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x838c8, data, tail12] + - [0x838c8, data, tail13] - [0x83948, .rodata, ov_SC03_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8395c, data, tail13] + - [0x8395c, data, tail14] - [0x83b04, .rodata, ov_SC03_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83c7c, data, tail14] + - [0x83c7c, data, tail15] - [0x83d0c, .rodata, ov_SC03_013_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83d98, data, tail15] + - [0x83d98, data, tail16] - [0x853FC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x853FF] # 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_014.yaml b/config/splat.ov_SC03_014.yaml index 7b47c8ffe..ad4b4b6e6 100644 --- a/config/splat.ov_SC03_014.yaml +++ b/config/splat.ov_SC03_014.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_014_jr_801380E0] - [0x171f8, c, ov_SC03_014_jr_8013F350] - [0x17e80, c, ov_SC03_014_jr_8013FFD8] + - [0x184b0, c, ov_SC03_014_jr_80140608] - [0x1CA44, c, ov_SC03_014_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_014_after] - [0x2c2f4, c, ov_SC03_014_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xc0948, data, tail4] - [0xc094c, .rodata, ov_SC03_014_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0980, data, tail5] + - [0xc09bc, .rodata, ov_SC03_014_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc09d0, data, tail6] - [0xc09e8, .rodata, ov_SC03_014_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0a54, data, tail6] + - [0xc0a54, data, tail7] - [0xc0ac4, .rodata, ov_SC03_014_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0b08, .rodata, ov_SC03_014_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0b50, data, tail7] + - [0xc0b50, data, tail8] - [0xc0bb0, .rodata, ov_SC03_014_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0be4, data, tail8] + - [0xc0be4, data, tail9] - [0xc0be8, .rodata, ov_SC03_014_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c04, data, tail9] + - [0xc0c04, data, tail10] - [0xc0c08, .rodata, ov_SC03_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c24, data, tail10] + - [0xc0c24, data, tail11] - [0xc0c48, .rodata, ov_SC03_014_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c64, data, tail11] + - [0xc0c64, data, tail12] - [0xc0c7c, .rodata, ov_SC03_014_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c9c, data, tail12] + - [0xc0c9c, data, tail13] - [0xc0d1c, .rodata, ov_SC03_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail13] + - [0xc0d30, data, tail14] - [0xc0ed8, .rodata, ov_SC03_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail14] + - [0xc1050, data, tail15] - [0xc10e0, .rodata, ov_SC03_014_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc116c, data, tail15] + - [0xc116c, data, tail16] - [0xc11b0, .rodata, ov_SC03_014_jr_8017EB7C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc11d0, data, tail16] + - [0xc11d0, data, tail17] - [0xC2EE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC2EE7] # 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_015.yaml b/config/splat.ov_SC03_015.yaml index 0474ac4f4..672ac449d 100644 --- a/config/splat.ov_SC03_015.yaml +++ b/config/splat.ov_SC03_015.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_015_jr_801380E0] - [0x171f8, c, ov_SC03_015_jr_8013F350] - [0x17e80, c, ov_SC03_015_jr_8013FFD8] + - [0x184b0, c, ov_SC03_015_jr_80140608] - [0x1CA44, c, ov_SC03_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_015_after] - [0x2c2f4, c, ov_SC03_015_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xc0948, data, tail4] - [0xc094c, .rodata, ov_SC03_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0980, data, tail5] + - [0xc09bc, .rodata, ov_SC03_015_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc09d0, data, tail6] - [0xc09e8, .rodata, ov_SC03_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0a54, data, tail6] + - [0xc0a54, data, tail7] - [0xc0ac4, .rodata, ov_SC03_015_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0b08, .rodata, ov_SC03_015_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0b50, data, tail7] + - [0xc0b50, data, tail8] - [0xc0bb0, .rodata, ov_SC03_015_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0be4, data, tail8] + - [0xc0be4, data, tail9] - [0xc0be8, .rodata, ov_SC03_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c04, data, tail9] + - [0xc0c04, data, tail10] - [0xc0c08, .rodata, ov_SC03_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c24, data, tail10] + - [0xc0c24, data, tail11] - [0xc0c48, .rodata, ov_SC03_015_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c64, data, tail11] + - [0xc0c64, data, tail12] - [0xc0c7c, .rodata, ov_SC03_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c9c, data, tail12] + - [0xc0c9c, data, tail13] - [0xc0d1c, .rodata, ov_SC03_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail13] + - [0xc0d30, data, tail14] - [0xc0ed8, .rodata, ov_SC03_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail14] + - [0xc1050, data, tail15] - [0xc10e0, .rodata, ov_SC03_015_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc116c, data, tail15] + - [0xc116c, data, tail16] - [0xc11b0, .rodata, ov_SC03_015_jr_8017EB7C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc11d0, data, tail16] + - [0xc11d0, data, tail17] - [0xC2EE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC2EE7] # 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_023.yaml b/config/splat.ov_SC03_023.yaml index 367fb1e89..b0665f141 100644 --- a/config/splat.ov_SC03_023.yaml +++ b/config/splat.ov_SC03_023.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_023_jr_801380E0] - [0x171f8, c, ov_SC03_023_jr_8013F350] - [0x17e80, c, ov_SC03_023_jr_8013FFD8] + - [0x184b0, c, ov_SC03_023_jr_80140608] - [0x1CA44, c, ov_SC03_023_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_023_after] - [0x2c2f4, c, ov_SC03_023_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x6ef20, data, tail4] - [0x6ef24, .rodata, ov_SC03_023_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ef58, data, tail5] + - [0x6ef94, .rodata, ov_SC03_023_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6efa8, data, tail6] - [0x6efc0, .rodata, ov_SC03_023_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f02c, data, tail6] + - [0x6f02c, data, tail7] - [0x6f09c, .rodata, ov_SC03_023_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6f0e0, .rodata, ov_SC03_023_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f128, data, tail7] + - [0x6f128, data, tail8] - [0x6f188, .rodata, ov_SC03_023_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f1bc, data, tail8] + - [0x6f1bc, data, tail9] - [0x6f1c0, .rodata, ov_SC03_023_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f1dc, data, tail9] + - [0x6f1dc, data, tail10] - [0x6f1e0, .rodata, ov_SC03_023_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f1fc, data, tail10] + - [0x6f1fc, data, tail11] - [0x6f220, .rodata, ov_SC03_023_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f23c, data, tail11] + - [0x6f23c, data, tail12] - [0x6f254, .rodata, ov_SC03_023_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f274, data, tail12] + - [0x6f274, data, tail13] - [0x6f2f4, .rodata, ov_SC03_023_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f308, data, tail13] + - [0x6f308, data, tail14] - [0x6f4b0, .rodata, ov_SC03_023_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f628, data, tail14] + - [0x6f628, data, tail15] - [0x6f6b8, .rodata, ov_SC03_023_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f744, data, tail15] + - [0x6f744, data, tail16] - [0x70C2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x70C2F] # 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_024.yaml b/config/splat.ov_SC03_024.yaml index 5d1615ffd..97244b690 100644 --- a/config/splat.ov_SC03_024.yaml +++ b/config/splat.ov_SC03_024.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_024_jr_801380E0] - [0x171f8, c, ov_SC03_024_jr_8013F350] - [0x17e80, c, ov_SC03_024_jr_8013FFD8] + - [0x184b0, c, ov_SC03_024_jr_80140608] - [0x1CA44, c, ov_SC03_024_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_024_after] - [0x2c2f4, c, ov_SC03_024_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x973a8, data, tail4] - [0x973ac, .rodata, ov_SC03_024_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x973e0, data, tail5] + - [0x9741c, .rodata, ov_SC03_024_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97430, data, tail6] - [0x97448, .rodata, ov_SC03_024_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x974b4, data, tail6] + - [0x974b4, data, tail7] - [0x97524, .rodata, ov_SC03_024_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97568, .rodata, ov_SC03_024_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x975b0, data, tail7] + - [0x975b0, data, tail8] - [0x97610, .rodata, ov_SC03_024_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97644, data, tail8] + - [0x97644, data, tail9] - [0x97648, .rodata, ov_SC03_024_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97664, data, tail9] + - [0x97664, data, tail10] - [0x97668, .rodata, ov_SC03_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97684, data, tail10] + - [0x97684, data, tail11] - [0x976a8, .rodata, ov_SC03_024_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x976c4, data, tail11] + - [0x976c4, data, tail12] - [0x976dc, .rodata, ov_SC03_024_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x976fc, data, tail12] + - [0x976fc, data, tail13] - [0x9777c, .rodata, ov_SC03_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97790, data, tail13] + - [0x97790, data, tail14] - [0x97938, .rodata, ov_SC03_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97ab0, data, tail14] + - [0x97ab0, data, tail15] - [0x97b40, .rodata, ov_SC03_024_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97bcc, data, tail15] + - [0x97bcc, data, tail16] - [0x97c10, .rodata, ov_SC03_024_jr_8017DF84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97c30, data, tail16] + - [0x97c30, data, tail17] - [0x996F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x996F7] # 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_028.yaml b/config/splat.ov_SC03_028.yaml index ae49663f0..8f6663d9a 100644 --- a/config/splat.ov_SC03_028.yaml +++ b/config/splat.ov_SC03_028.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_028_jr_801380E0] - [0x171f8, c, ov_SC03_028_jr_8013F350] - [0x17e80, c, ov_SC03_028_jr_8013FFD8] + - [0x184b0, c, ov_SC03_028_jr_80140608] - [0x1CA44, c, ov_SC03_028_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_028_after] - [0x2c2f4, c, ov_SC03_028_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xc1530, data, tail4] - [0xc1534, .rodata, ov_SC03_028_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc1568, data, tail5] + - [0xc15a4, .rodata, ov_SC03_028_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc15b8, data, tail6] - [0xc15d0, .rodata, ov_SC03_028_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc163c, data, tail6] + - [0xc163c, data, tail7] - [0xc16ac, .rodata, ov_SC03_028_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc16f0, .rodata, ov_SC03_028_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1738, data, tail7] + - [0xc1738, data, tail8] - [0xc1798, .rodata, ov_SC03_028_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc17cc, data, tail8] + - [0xc17cc, data, tail9] - [0xc17d0, .rodata, ov_SC03_028_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc17ec, data, tail9] + - [0xc17ec, data, tail10] - [0xc17f0, .rodata, ov_SC03_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc180c, data, tail10] + - [0xc180c, data, tail11] - [0xc1830, .rodata, ov_SC03_028_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc184c, data, tail11] + - [0xc184c, data, tail12] - [0xc1864, .rodata, ov_SC03_028_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1884, data, tail12] + - [0xc1884, data, tail13] - [0xc1904, .rodata, ov_SC03_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1918, data, tail13] + - [0xc1918, data, tail14] - [0xc1ac0, .rodata, ov_SC03_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1c38, data, tail14] + - [0xc1c38, data, tail15] - [0xc1cc8, .rodata, ov_SC03_028_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1d54, data, tail15] + - [0xc1d54, data, tail16] - [0xC44AC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC44AF] # 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_029.yaml b/config/splat.ov_SC03_029.yaml index 06dec3832..88dcfb769 100644 --- a/config/splat.ov_SC03_029.yaml +++ b/config/splat.ov_SC03_029.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_029_jr_801380E0] - [0x171f8, c, ov_SC03_029_jr_8013F350] - [0x17e80, c, ov_SC03_029_jr_8013FFD8] + - [0x184b0, c, ov_SC03_029_jr_80140608] - [0x1CA44, c, ov_SC03_029_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_029_after] - [0x2c2f4, c, ov_SC03_029_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xaf664, data, tail4] - [0xaf668, .rodata, ov_SC03_029_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaf69c, data, tail5] + - [0xaf6d8, .rodata, ov_SC03_029_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaf6ec, data, tail6] - [0xaf704, .rodata, ov_SC03_029_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf770, data, tail6] + - [0xaf770, data, tail7] - [0xaf7e0, .rodata, ov_SC03_029_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaf824, .rodata, ov_SC03_029_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf86c, data, tail7] + - [0xaf86c, data, tail8] - [0xaf8cc, .rodata, ov_SC03_029_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf900, data, tail8] + - [0xaf900, data, tail9] - [0xaf904, .rodata, ov_SC03_029_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf920, data, tail9] + - [0xaf920, data, tail10] - [0xaf924, .rodata, ov_SC03_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf940, data, tail10] + - [0xaf940, data, tail11] - [0xaf964, .rodata, ov_SC03_029_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf980, data, tail11] + - [0xaf980, data, tail12] - [0xaf998, .rodata, ov_SC03_029_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf9b8, data, tail12] + - [0xaf9b8, data, tail13] - [0xafa38, .rodata, ov_SC03_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafa4c, data, tail13] + - [0xafa4c, data, tail14] - [0xafbf4, .rodata, ov_SC03_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafd6c, data, tail14] + - [0xafd6c, data, tail15] - [0xafdfc, .rodata, ov_SC03_029_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafe88, data, tail15] + - [0xafe88, data, tail16] - [0xafea0, .rodata, ov_SC03_029_jr_8017DC70] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafec0, data, tail16] + - [0xafec0, data, tail17] - [0xB18EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xB18EF] # 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_030.yaml b/config/splat.ov_SC03_030.yaml index 890d08a26..773ffb3c6 100644 --- a/config/splat.ov_SC03_030.yaml +++ b/config/splat.ov_SC03_030.yaml @@ -97,6 +97,7 @@ segments: - [0x2b88, c, ov_SC03_030_jr_8012ACE0] - [0xff88, c, ov_SC03_030_jr_801380E0] - [0x171f8, c, ov_SC03_030_jr_8013F350] + - [0x184b0, c, ov_SC03_030_jr_80140608] - [0x1CA44, c, ov_SC03_030_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_030_after] - [0x2c2f4, c, ov_SC03_030_jr_8015444C] @@ -117,27 +118,29 @@ segments: - [0xb76c8, data, tail3] - [0xb7cd4, .rodata, ov_SC03_030_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7d08, data, tail4] + - [0xb7d7c, .rodata, ov_SC03_030_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7d90, data, tail5] - [0xb7da8, .rodata, ov_SC03_030_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7e14, data, tail5] + - [0xb7e14, data, tail6] - [0xb7e84, .rodata, ov_SC03_030_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7ec8, .rodata, ov_SC03_030_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7f10, data, tail6] + - [0xb7f10, data, tail7] - [0xb7f70, .rodata, ov_SC03_030_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7fa4, data, tail7] + - [0xb7fa4, data, tail8] - [0xb7fa8, .rodata, ov_SC03_030_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7fc4, data, tail8] + - [0xb7fc4, data, tail9] - [0xb7fc8, .rodata, ov_SC03_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7fe4, data, tail9] + - [0xb7fe4, data, tail10] - [0xb8008, .rodata, ov_SC03_030_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8024, data, tail10] + - [0xb8024, data, tail11] - [0xb803c, .rodata, ov_SC03_030_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb805c, data, tail11] + - [0xb805c, data, tail12] - [0xb80dc, .rodata, ov_SC03_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb80f0, data, tail12] + - [0xb80f0, data, tail13] - [0xb8298, .rodata, ov_SC03_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8410, data, tail13] + - [0xb8410, data, tail14] - [0xb84a0, .rodata, ov_SC03_030_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb852c, data, tail14] + - [0xb852c, data, tail15] - [0xB9AF0] # 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 # ` - [0x, bin, trailing]` (the final 1-3 bytes spimdisasm's data path drops); diff --git a/config/splat.ov_SC03_031.yaml b/config/splat.ov_SC03_031.yaml index 9b6e3b131..141de6f7a 100644 --- a/config/splat.ov_SC03_031.yaml +++ b/config/splat.ov_SC03_031.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_031_jr_801380E0] - [0x171f8, c, ov_SC03_031_jr_8013F350] - [0x17e80, c, ov_SC03_031_jr_8013FFD8] + - [0x184b0, c, ov_SC03_031_jr_80140608] - [0x1CA44, c, ov_SC03_031_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_031_after] - [0x2c2f4, c, ov_SC03_031_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9c1ac, data, tail4] - [0x9c1b0, .rodata, ov_SC03_031_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c1e4, data, tail5] + - [0x9c220, .rodata, ov_SC03_031_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c234, data, tail6] - [0x9c24c, .rodata, ov_SC03_031_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c2b8, data, tail6] + - [0x9c2b8, data, tail7] - [0x9c328, .rodata, ov_SC03_031_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c36c, .rodata, ov_SC03_031_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c3b4, data, tail7] + - [0x9c3b4, data, tail8] - [0x9c414, .rodata, ov_SC03_031_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c448, data, tail8] + - [0x9c448, data, tail9] - [0x9c44c, .rodata, ov_SC03_031_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c468, data, tail9] + - [0x9c468, data, tail10] - [0x9c46c, .rodata, ov_SC03_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c488, data, tail10] + - [0x9c488, data, tail11] - [0x9c4ac, .rodata, ov_SC03_031_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c4c8, data, tail11] + - [0x9c4c8, data, tail12] - [0x9c4e0, .rodata, ov_SC03_031_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c500, data, tail12] + - [0x9c500, data, tail13] - [0x9c580, .rodata, ov_SC03_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c594, data, tail13] + - [0x9c594, data, tail14] - [0x9c73c, .rodata, ov_SC03_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c8b4, data, tail14] + - [0x9c8b4, data, tail15] - [0x9c944, .rodata, ov_SC03_031_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c9d0, data, tail15] + - [0x9c9d0, data, tail16] - [0x9c9e8, .rodata, ov_SC03_031_jr_8017DB5C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ca08, data, tail16] + - [0x9ca08, data, tail17] - [0x9E14C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9E14F] # 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_089.yaml b/config/splat.ov_SC03_089.yaml index c0f4caf3f..cab360cdd 100644 --- a/config/splat.ov_SC03_089.yaml +++ b/config/splat.ov_SC03_089.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_089_jr_801380E0] - [0x171f8, c, ov_SC03_089_jr_8013F350] - [0x17e80, c, ov_SC03_089_jr_8013FFD8] + - [0x184b0, c, ov_SC03_089_jr_80140608] - [0x1CA44, c, ov_SC03_089_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_089_after] - [0x2c2f4, c, ov_SC03_089_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9ca18, data, tail4] - [0x9ca1c, .rodata, ov_SC03_089_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ca50, data, tail5] + - [0x9ca8c, .rodata, ov_SC03_089_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9caa0, data, tail6] - [0x9cab8, .rodata, ov_SC03_089_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9cb24, data, tail6] + - [0x9cb24, data, tail7] - [0x9cb94, .rodata, ov_SC03_089_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9cbd8, .rodata, ov_SC03_089_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9cc20, data, tail7] + - [0x9cc20, data, tail8] - [0x9cc80, .rodata, ov_SC03_089_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ccb4, data, tail8] + - [0x9ccb4, data, tail9] - [0x9ccb8, .rodata, ov_SC03_089_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ccd4, data, tail9] + - [0x9ccd4, data, tail10] - [0x9ccd8, .rodata, ov_SC03_089_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ccf4, data, tail10] + - [0x9ccf4, data, tail11] - [0x9cd18, .rodata, ov_SC03_089_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9cd34, data, tail11] + - [0x9cd34, data, tail12] - [0x9cd4c, .rodata, ov_SC03_089_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9cd6c, data, tail12] + - [0x9cd6c, data, tail13] - [0x9cdec, .rodata, ov_SC03_089_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ce00, data, tail13] + - [0x9ce00, data, tail14] - [0x9cfa8, .rodata, ov_SC03_089_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d120, data, tail14] + - [0x9d120, data, tail15] - [0x9d1b0, .rodata, ov_SC03_089_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d23c, data, tail15] + - [0x9d23c, data, tail16] - [0x9d254, .rodata, ov_SC03_089_jr_8017CA80] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d274, data, tail16] + - [0x9d274, data, tail17] - [0x9E7C4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9E7C7] # 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_090.yaml b/config/splat.ov_SC03_090.yaml index b1c1c8aff..2e2bf5d37 100644 --- a/config/splat.ov_SC03_090.yaml +++ b/config/splat.ov_SC03_090.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_090_jr_801380E0] - [0x171f8, c, ov_SC03_090_jr_8013F350] - [0x17e80, c, ov_SC03_090_jr_8013FFD8] + - [0x184b0, c, ov_SC03_090_jr_80140608] - [0x1CA44, c, ov_SC03_090_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_090_after] - [0x2c2f4, c, ov_SC03_090_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa1e84, data, tail4] - [0xa1e88, .rodata, ov_SC03_090_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1ebc, data, tail5] + - [0xa1ef8, .rodata, ov_SC03_090_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa1f0c, data, tail6] - [0xa1f24, .rodata, ov_SC03_090_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1f90, data, tail6] + - [0xa1f90, data, tail7] - [0xa2000, .rodata, ov_SC03_090_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2044, .rodata, ov_SC03_090_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa208c, data, tail7] + - [0xa208c, data, tail8] - [0xa20ec, .rodata, ov_SC03_090_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2120, data, tail8] + - [0xa2120, data, tail9] - [0xa2124, .rodata, ov_SC03_090_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2140, data, tail9] + - [0xa2140, data, tail10] - [0xa2144, .rodata, ov_SC03_090_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2160, data, tail10] + - [0xa2160, data, tail11] - [0xa2184, .rodata, ov_SC03_090_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa21a0, data, tail11] + - [0xa21a0, data, tail12] - [0xa21b8, .rodata, ov_SC03_090_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa21d8, data, tail12] + - [0xa21d8, data, tail13] - [0xa2258, .rodata, ov_SC03_090_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa226c, data, tail13] + - [0xa226c, data, tail14] - [0xa2414, .rodata, ov_SC03_090_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa258c, data, tail14] + - [0xa258c, data, tail15] - [0xa261c, .rodata, ov_SC03_090_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa26a8, data, tail15] + - [0xa26a8, data, tail16] - [0xa26c0, .rodata, ov_SC03_090_jr_8017CA80] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa26e0, data, tail16] + - [0xa26e0, data, tail17] - [0xA3C34, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA3C37] # 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_091.yaml b/config/splat.ov_SC03_091.yaml index db6e2c5c4..cb16285f2 100644 --- a/config/splat.ov_SC03_091.yaml +++ b/config/splat.ov_SC03_091.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_091_jr_801380E0] - [0x171f8, c, ov_SC03_091_jr_8013F350] - [0x17e80, c, ov_SC03_091_jr_8013FFD8] + - [0x184b0, c, ov_SC03_091_jr_80140608] - [0x1CA44, c, ov_SC03_091_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_091_after] - [0x2c2f4, c, ov_SC03_091_jr_8015444C] @@ -122,29 +123,31 @@ segments: - [0xa8550, data, tail4] - [0xa8554, .rodata, ov_SC03_091_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8588, data, tail5] + - [0xa85c4, .rodata, ov_SC03_091_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa85d8, data, tail6] - [0xa85f0, .rodata, ov_SC03_091_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa865c, data, tail6] + - [0xa865c, data, tail7] - [0xa86cc, .rodata, ov_SC03_091_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8710, .rodata, ov_SC03_091_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8758, data, tail7] + - [0xa8758, data, tail8] - [0xa87b8, .rodata, ov_SC03_091_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa87ec, data, tail8] + - [0xa87ec, data, tail9] - [0xa87f0, .rodata, ov_SC03_091_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa880c, data, tail9] + - [0xa880c, data, tail10] - [0xa8810, .rodata, ov_SC03_091_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa882c, data, tail10] + - [0xa882c, data, tail11] - [0xa8850, .rodata, ov_SC03_091_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa886c, data, tail11] + - [0xa886c, data, tail12] - [0xa8884, .rodata, ov_SC03_091_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa88a4, data, tail12] + - [0xa88a4, data, tail13] - [0xa8924, .rodata, ov_SC03_091_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8938, data, tail13] + - [0xa8938, data, tail14] - [0xa8ae0, .rodata, ov_SC03_091_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8c58, data, tail14] + - [0xa8c58, data, tail15] - [0xa8ce8, .rodata, ov_SC03_091_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8d74, data, tail15] + - [0xa8d74, data, tail16] - [0xa8d8c, .rodata, ov_SC03_091_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8dac, data, tail16] + - [0xa8dac, data, tail17] - [0xAA584, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAA587] # 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_092.yaml b/config/splat.ov_SC03_092.yaml index e9551dcf1..859f440d8 100644 --- a/config/splat.ov_SC03_092.yaml +++ b/config/splat.ov_SC03_092.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_092_jr_801380E0] - [0x171f8, c, ov_SC03_092_jr_8013F350] - [0x17e80, c, ov_SC03_092_jr_8013FFD8] + - [0x184b0, c, ov_SC03_092_jr_80140608] - [0x1CA44, c, ov_SC03_092_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_092_after] - [0x2c2f4, c, ov_SC03_092_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x89128, data, tail4] - [0x8912c, .rodata, ov_SC03_092_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89160, data, tail5] + - [0x8919c, .rodata, ov_SC03_092_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x891b0, data, tail6] - [0x891c8, .rodata, ov_SC03_092_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89234, data, tail6] + - [0x89234, data, tail7] - [0x892a4, .rodata, ov_SC03_092_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x892e8, .rodata, ov_SC03_092_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89330, data, tail7] + - [0x89330, data, tail8] - [0x89390, .rodata, ov_SC03_092_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x893c4, data, tail8] + - [0x893c4, data, tail9] - [0x893c8, .rodata, ov_SC03_092_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x893e4, data, tail9] + - [0x893e4, data, tail10] - [0x893e8, .rodata, ov_SC03_092_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89404, data, tail10] + - [0x89404, data, tail11] - [0x89428, .rodata, ov_SC03_092_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89444, data, tail11] + - [0x89444, data, tail12] - [0x8945c, .rodata, ov_SC03_092_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8947c, data, tail12] + - [0x8947c, data, tail13] - [0x894fc, .rodata, ov_SC03_092_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89510, data, tail13] + - [0x89510, data, tail14] - [0x896b8, .rodata, ov_SC03_092_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89830, data, tail14] + - [0x89830, data, tail15] - [0x898c0, .rodata, ov_SC03_092_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8994c, data, tail15] + - [0x8994c, data, tail16] - [0x8AF2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8AF2F] # 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_093.yaml b/config/splat.ov_SC03_093.yaml index 9f28012a1..f31c47703 100644 --- a/config/splat.ov_SC03_093.yaml +++ b/config/splat.ov_SC03_093.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_093_jr_801380E0] - [0x171f8, c, ov_SC03_093_jr_8013F350] - [0x17e80, c, ov_SC03_093_jr_8013FFD8] + - [0x184b0, c, ov_SC03_093_jr_80140608] - [0x1CA44, c, ov_SC03_093_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_093_after] - [0x2c2f4, c, ov_SC03_093_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa257c, data, tail4] - [0xa2580, .rodata, ov_SC03_093_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa25b4, data, tail5] + - [0xa25f0, .rodata, ov_SC03_093_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2604, data, tail6] - [0xa261c, .rodata, ov_SC03_093_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2688, data, tail6] + - [0xa2688, data, tail7] - [0xa26f8, .rodata, ov_SC03_093_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa273c, .rodata, ov_SC03_093_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2784, data, tail7] + - [0xa2784, data, tail8] - [0xa27e4, .rodata, ov_SC03_093_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2818, data, tail8] + - [0xa2818, data, tail9] - [0xa281c, .rodata, ov_SC03_093_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2838, data, tail9] + - [0xa2838, data, tail10] - [0xa283c, .rodata, ov_SC03_093_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2858, data, tail10] + - [0xa2858, data, tail11] - [0xa287c, .rodata, ov_SC03_093_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2898, data, tail11] + - [0xa2898, data, tail12] - [0xa28b0, .rodata, ov_SC03_093_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa28d0, data, tail12] + - [0xa28d0, data, tail13] - [0xa2950, .rodata, ov_SC03_093_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2964, data, tail13] + - [0xa2964, data, tail14] - [0xa2b0c, .rodata, ov_SC03_093_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2c84, data, tail14] + - [0xa2c84, data, tail15] - [0xa2d14, .rodata, ov_SC03_093_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2da0, data, tail15] + - [0xa2da0, data, tail16] - [0xa2db8, .rodata, ov_SC03_093_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2dd8, data, tail16] + - [0xa2dd8, data, tail17] - [0xA4584, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA4587] # 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_094.yaml b/config/splat.ov_SC03_094.yaml index d4d5aea9c..20d5b7dcb 100644 --- a/config/splat.ov_SC03_094.yaml +++ b/config/splat.ov_SC03_094.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_094_jr_801380E0] - [0x171f8, c, ov_SC03_094_jr_8013F350] - [0x17e80, c, ov_SC03_094_jr_8013FFD8] + - [0x184b0, c, ov_SC03_094_jr_80140608] - [0x1CA44, c, ov_SC03_094_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_094_after] - [0x2c2f4, c, ov_SC03_094_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa93b8, data, tail4] - [0xa93bc, .rodata, ov_SC03_094_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa93f0, data, tail5] + - [0xa942c, .rodata, ov_SC03_094_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa9440, data, tail6] - [0xa9458, .rodata, ov_SC03_094_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa94c4, data, tail6] + - [0xa94c4, data, tail7] - [0xa9534, .rodata, ov_SC03_094_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9578, .rodata, ov_SC03_094_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa95c0, data, tail7] + - [0xa95c0, data, tail8] - [0xa9620, .rodata, ov_SC03_094_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9654, data, tail8] + - [0xa9654, data, tail9] - [0xa9658, .rodata, ov_SC03_094_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9674, data, tail9] + - [0xa9674, data, tail10] - [0xa9678, .rodata, ov_SC03_094_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9694, data, tail10] + - [0xa9694, data, tail11] - [0xa96b8, .rodata, ov_SC03_094_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa96d4, data, tail11] + - [0xa96d4, data, tail12] - [0xa96ec, .rodata, ov_SC03_094_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa970c, data, tail12] + - [0xa970c, data, tail13] - [0xa978c, .rodata, ov_SC03_094_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97a0, data, tail13] + - [0xa97a0, data, tail14] - [0xa9948, .rodata, ov_SC03_094_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9ac0, data, tail14] + - [0xa9ac0, data, tail15] - [0xa9b50, .rodata, ov_SC03_094_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9bdc, data, tail15] + - [0xa9bdc, data, tail16] - [0xa9bf4, .rodata, ov_SC03_094_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9c14, data, tail16] + - [0xa9c14, data, tail17] - [0xAB13C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAB13F] # 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_095.yaml b/config/splat.ov_SC03_095.yaml index 83e1faef0..9bba21206 100644 --- a/config/splat.ov_SC03_095.yaml +++ b/config/splat.ov_SC03_095.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_095_jr_801380E0] - [0x171f8, c, ov_SC03_095_jr_8013F350] - [0x17e80, c, ov_SC03_095_jr_8013FFD8] + - [0x184b0, c, ov_SC03_095_jr_80140608] - [0x1CA44, c, ov_SC03_095_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_095_after] - [0x2c2f4, c, ov_SC03_095_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x71fe4, data, tail4] - [0x71fe8, .rodata, ov_SC03_095_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7201c, data, tail5] + - [0x72058, .rodata, ov_SC03_095_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7206c, data, tail6] - [0x72084, .rodata, ov_SC03_095_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x720f0, data, tail6] + - [0x720f0, data, tail7] - [0x72160, .rodata, ov_SC03_095_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x721a4, .rodata, ov_SC03_095_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x721ec, data, tail7] + - [0x721ec, data, tail8] - [0x7224c, .rodata, ov_SC03_095_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72280, data, tail8] + - [0x72280, data, tail9] - [0x72284, .rodata, ov_SC03_095_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722a0, data, tail9] + - [0x722a0, data, tail10] - [0x722a4, .rodata, ov_SC03_095_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722c0, data, tail10] + - [0x722c0, data, tail11] - [0x722e4, .rodata, ov_SC03_095_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72300, data, tail11] + - [0x72300, data, tail12] - [0x72318, .rodata, ov_SC03_095_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72338, data, tail12] + - [0x72338, data, tail13] - [0x723b8, .rodata, ov_SC03_095_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723cc, data, tail13] + - [0x723cc, data, tail14] - [0x72574, .rodata, ov_SC03_095_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x726ec, data, tail14] + - [0x726ec, data, tail15] - [0x7277c, .rodata, ov_SC03_095_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72808, data, tail15] + - [0x72808, data, tail16] - [0x72820, .rodata, ov_SC03_095_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72840, data, tail16] + - [0x72840, data, tail17] - [0x73D3C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x73D3F] # 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_096.yaml b/config/splat.ov_SC03_096.yaml index 51be4c3a1..f8794dbbd 100644 --- a/config/splat.ov_SC03_096.yaml +++ b/config/splat.ov_SC03_096.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_096_jr_801380E0] - [0x171f8, c, ov_SC03_096_jr_8013F350] - [0x17e80, c, ov_SC03_096_jr_8013FFD8] + - [0x184b0, c, ov_SC03_096_jr_80140608] - [0x1CA44, c, ov_SC03_096_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_096_after] - [0x2c2f4, c, ov_SC03_096_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x70a98, data, tail4] - [0x70a9c, .rodata, ov_SC03_096_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70ad0, data, tail5] + - [0x70b0c, .rodata, ov_SC03_096_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70b20, data, tail6] - [0x70b38, .rodata, ov_SC03_096_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70ba4, data, tail6] + - [0x70ba4, data, tail7] - [0x70c14, .rodata, ov_SC03_096_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70c58, .rodata, ov_SC03_096_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70ca0, data, tail7] + - [0x70ca0, data, tail8] - [0x70d00, .rodata, ov_SC03_096_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d34, data, tail8] + - [0x70d34, data, tail9] - [0x70d38, .rodata, ov_SC03_096_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d54, data, tail9] + - [0x70d54, data, tail10] - [0x70d58, .rodata, ov_SC03_096_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d74, data, tail10] + - [0x70d74, data, tail11] - [0x70d98, .rodata, ov_SC03_096_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70db4, data, tail11] + - [0x70db4, data, tail12] - [0x70dcc, .rodata, ov_SC03_096_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70dec, data, tail12] + - [0x70dec, data, tail13] - [0x70e6c, .rodata, ov_SC03_096_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70e80, data, tail13] + - [0x70e80, data, tail14] - [0x71028, .rodata, ov_SC03_096_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711a0, data, tail14] + - [0x711a0, data, tail15] - [0x71230, .rodata, ov_SC03_096_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x712bc, data, tail15] + - [0x712bc, data, tail16] - [0x712d4, .rodata, ov_SC03_096_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x712f4, data, tail16] + - [0x712f4, data, tail17] - [0x727F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x727F7] # 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_097.yaml b/config/splat.ov_SC03_097.yaml index adc430408..7d42c61ca 100644 --- a/config/splat.ov_SC03_097.yaml +++ b/config/splat.ov_SC03_097.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_097_jr_801380E0] - [0x171f8, c, ov_SC03_097_jr_8013F350] - [0x17e80, c, ov_SC03_097_jr_8013FFD8] + - [0x184b0, c, ov_SC03_097_jr_80140608] - [0x1CA44, c, ov_SC03_097_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_097_after] - [0x2c2f4, c, ov_SC03_097_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x80b08, data, tail4] - [0x80b0c, .rodata, ov_SC03_097_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80b40, data, tail5] + - [0x80b7c, .rodata, ov_SC03_097_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80b90, data, tail6] - [0x80ba8, .rodata, ov_SC03_097_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80c14, data, tail6] + - [0x80c14, data, tail7] - [0x80c84, .rodata, ov_SC03_097_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80cc8, .rodata, ov_SC03_097_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80d10, data, tail7] + - [0x80d10, data, tail8] - [0x80d70, .rodata, ov_SC03_097_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80da4, data, tail8] + - [0x80da4, data, tail9] - [0x80da8, .rodata, ov_SC03_097_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80dc4, data, tail9] + - [0x80dc4, data, tail10] - [0x80dc8, .rodata, ov_SC03_097_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80de4, data, tail10] + - [0x80de4, data, tail11] - [0x80e08, .rodata, ov_SC03_097_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80e24, data, tail11] + - [0x80e24, data, tail12] - [0x80e3c, .rodata, ov_SC03_097_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80e5c, data, tail12] + - [0x80e5c, data, tail13] - [0x80edc, .rodata, ov_SC03_097_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80ef0, data, tail13] + - [0x80ef0, data, tail14] - [0x81098, .rodata, ov_SC03_097_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81210, data, tail14] + - [0x81210, data, tail15] - [0x812a0, .rodata, ov_SC03_097_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8132c, data, tail15] + - [0x8132c, data, tail16] - [0x81344, .rodata, ov_SC03_097_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81364, data, tail16] + - [0x81364, data, tail17] - [0x82D74, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x82D77] # 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_098.yaml b/config/splat.ov_SC03_098.yaml index 857a307a7..e1daeb879 100644 --- a/config/splat.ov_SC03_098.yaml +++ b/config/splat.ov_SC03_098.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_098_jr_801380E0] - [0x171f8, c, ov_SC03_098_jr_8013F350] - [0x17e80, c, ov_SC03_098_jr_8013FFD8] + - [0x184b0, c, ov_SC03_098_jr_80140608] - [0x1CA44, c, ov_SC03_098_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_098_after] - [0x2c2f4, c, ov_SC03_098_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9b78c, data, tail4] - [0x9b790, .rodata, ov_SC03_098_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b7c4, data, tail5] + - [0x9b800, .rodata, ov_SC03_098_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9b814, data, tail6] - [0x9b82c, .rodata, ov_SC03_098_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b898, data, tail6] + - [0x9b898, data, tail7] - [0x9b908, .rodata, ov_SC03_098_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b94c, .rodata, ov_SC03_098_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b994, data, tail7] + - [0x9b994, data, tail8] - [0x9b9f4, .rodata, ov_SC03_098_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ba28, data, tail8] + - [0x9ba28, data, tail9] - [0x9ba2c, .rodata, ov_SC03_098_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ba48, data, tail9] + - [0x9ba48, data, tail10] - [0x9ba4c, .rodata, ov_SC03_098_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ba68, data, tail10] + - [0x9ba68, data, tail11] - [0x9ba8c, .rodata, ov_SC03_098_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9baa8, data, tail11] + - [0x9baa8, data, tail12] - [0x9bac0, .rodata, ov_SC03_098_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bae0, data, tail12] + - [0x9bae0, data, tail13] - [0x9bb60, .rodata, ov_SC03_098_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bb74, data, tail13] + - [0x9bb74, data, tail14] - [0x9bd1c, .rodata, ov_SC03_098_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9be94, data, tail14] + - [0x9be94, data, tail15] - [0x9bf24, .rodata, ov_SC03_098_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bfb0, data, tail15] + - [0x9bfb0, data, tail16] - [0x9bfc8, .rodata, ov_SC03_098_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bfe8, data, tail16] + - [0x9bfe8, data, tail17] - [0x9D75C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9D75F] # 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_099.yaml b/config/splat.ov_SC03_099.yaml index 89ff16934..374375008 100644 --- a/config/splat.ov_SC03_099.yaml +++ b/config/splat.ov_SC03_099.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_099_jr_801380E0] - [0x171f8, c, ov_SC03_099_jr_8013F350] - [0x17e80, c, ov_SC03_099_jr_8013FFD8] + - [0x184b0, c, ov_SC03_099_jr_80140608] - [0x1CA44, c, ov_SC03_099_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_099_after] - [0x2c2f4, c, ov_SC03_099_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x95460, data, tail4] - [0x95464, .rodata, ov_SC03_099_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x95498, data, tail5] + - [0x954d4, .rodata, ov_SC03_099_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x954e8, data, tail6] - [0x95500, .rodata, ov_SC03_099_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9556c, data, tail6] + - [0x9556c, data, tail7] - [0x955dc, .rodata, ov_SC03_099_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x95620, .rodata, ov_SC03_099_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95668, data, tail7] + - [0x95668, data, tail8] - [0x956c8, .rodata, ov_SC03_099_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x956fc, data, tail8] + - [0x956fc, data, tail9] - [0x95700, .rodata, ov_SC03_099_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9571c, data, tail9] + - [0x9571c, data, tail10] - [0x95720, .rodata, ov_SC03_099_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9573c, data, tail10] + - [0x9573c, data, tail11] - [0x95760, .rodata, ov_SC03_099_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9577c, data, tail11] + - [0x9577c, data, tail12] - [0x95794, .rodata, ov_SC03_099_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x957b4, data, tail12] + - [0x957b4, data, tail13] - [0x95834, .rodata, ov_SC03_099_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95848, data, tail13] + - [0x95848, data, tail14] - [0x959f0, .rodata, ov_SC03_099_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95b68, data, tail14] + - [0x95b68, data, tail15] - [0x95bf8, .rodata, ov_SC03_099_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95c84, data, tail15] + - [0x95c84, data, tail16] - [0x95c9c, .rodata, ov_SC03_099_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95cbc, data, tail16] + - [0x95cbc, data, tail17] - [0x97304, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x97307] # 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_100.yaml b/config/splat.ov_SC03_100.yaml index dd4fcca19..2de8fdf6c 100644 --- a/config/splat.ov_SC03_100.yaml +++ b/config/splat.ov_SC03_100.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_100_jr_801380E0] - [0x171f8, c, ov_SC03_100_jr_8013F350] - [0x17e80, c, ov_SC03_100_jr_8013FFD8] + - [0x184b0, c, ov_SC03_100_jr_80140608] - [0x1CA44, c, ov_SC03_100_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_100_after] - [0x2c2f4, c, ov_SC03_100_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9e6e4, data, tail4] - [0x9e6e8, .rodata, ov_SC03_100_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9e71c, data, tail5] + - [0x9e758, .rodata, ov_SC03_100_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9e76c, data, tail6] - [0x9e784, .rodata, ov_SC03_100_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e7f0, data, tail6] + - [0x9e7f0, data, tail7] - [0x9e860, .rodata, ov_SC03_100_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9e8a4, .rodata, ov_SC03_100_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e8ec, data, tail7] + - [0x9e8ec, data, tail8] - [0x9e94c, .rodata, ov_SC03_100_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e980, data, tail8] + - [0x9e980, data, tail9] - [0x9e984, .rodata, ov_SC03_100_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e9a0, data, tail9] + - [0x9e9a0, data, tail10] - [0x9e9a4, .rodata, ov_SC03_100_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e9c0, data, tail10] + - [0x9e9c0, data, tail11] - [0x9e9e4, .rodata, ov_SC03_100_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ea00, data, tail11] + - [0x9ea00, data, tail12] - [0x9ea18, .rodata, ov_SC03_100_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ea38, data, tail12] + - [0x9ea38, data, tail13] - [0x9eab8, .rodata, ov_SC03_100_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eacc, data, tail13] + - [0x9eacc, data, tail14] - [0x9ec74, .rodata, ov_SC03_100_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9edec, data, tail14] + - [0x9edec, data, tail15] - [0x9ee7c, .rodata, ov_SC03_100_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ef08, data, tail15] + - [0x9ef08, data, tail16] - [0x9ef20, .rodata, ov_SC03_100_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ef40, data, tail16] + - [0x9ef40, data, tail17] - [0xA080C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA080F] # 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_101.yaml b/config/splat.ov_SC03_101.yaml index 6eb2b8c92..af22f0236 100644 --- a/config/splat.ov_SC03_101.yaml +++ b/config/splat.ov_SC03_101.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_101_jr_801380E0] - [0x171f8, c, ov_SC03_101_jr_8013F350] - [0x17e80, c, ov_SC03_101_jr_8013FFD8] + - [0x184b0, c, ov_SC03_101_jr_80140608] - [0x1CA44, c, ov_SC03_101_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_101_after] - [0x2c2f4, c, ov_SC03_101_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x73fac, data, tail4] - [0x73fb0, .rodata, ov_SC03_101_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73fe4, data, tail5] + - [0x74020, .rodata, ov_SC03_101_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x74034, data, tail6] - [0x7404c, .rodata, ov_SC03_101_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x740b8, data, tail6] + - [0x740b8, data, tail7] - [0x74128, .rodata, ov_SC03_101_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7416c, .rodata, ov_SC03_101_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x741b4, data, tail7] + - [0x741b4, data, tail8] - [0x74214, .rodata, ov_SC03_101_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74248, data, tail8] + - [0x74248, data, tail9] - [0x7424c, .rodata, ov_SC03_101_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74268, data, tail9] + - [0x74268, data, tail10] - [0x7426c, .rodata, ov_SC03_101_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74288, data, tail10] + - [0x74288, data, tail11] - [0x742ac, .rodata, ov_SC03_101_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x742c8, data, tail11] + - [0x742c8, data, tail12] - [0x742e0, .rodata, ov_SC03_101_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74300, data, tail12] + - [0x74300, data, tail13] - [0x74380, .rodata, ov_SC03_101_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74394, data, tail13] + - [0x74394, data, tail14] - [0x7453c, .rodata, ov_SC03_101_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x746b4, data, tail14] + - [0x746b4, data, tail15] - [0x74744, .rodata, ov_SC03_101_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x747d0, data, tail15] + - [0x747d0, data, tail16] - [0x747e8, .rodata, ov_SC03_101_jr_8017CA80] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74808, data, tail16] + - [0x74808, data, tail17] - [0x760CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x760CF] # 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_102.yaml b/config/splat.ov_SC03_102.yaml index 21b8b7731..d014e6202 100644 --- a/config/splat.ov_SC03_102.yaml +++ b/config/splat.ov_SC03_102.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_102_jr_801380E0] - [0x171f8, c, ov_SC03_102_jr_8013F350] - [0x17e80, c, ov_SC03_102_jr_8013FFD8] + - [0x184b0, c, ov_SC03_102_jr_80140608] - [0x1CA44, c, ov_SC03_102_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_102_after] - [0x2c2f4, c, ov_SC03_102_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8fc28, data, tail4] - [0x8fc2c, .rodata, ov_SC03_102_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8fc60, data, tail5] + - [0x8fc9c, .rodata, ov_SC03_102_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fcb0, data, tail6] - [0x8fcc8, .rodata, ov_SC03_102_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fd34, data, tail6] + - [0x8fd34, data, tail7] - [0x8fda4, .rodata, ov_SC03_102_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8fde8, .rodata, ov_SC03_102_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fe30, data, tail7] + - [0x8fe30, data, tail8] - [0x8fe90, .rodata, ov_SC03_102_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fec4, data, tail8] + - [0x8fec4, data, tail9] - [0x8fec8, .rodata, ov_SC03_102_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fee4, data, tail9] + - [0x8fee4, data, tail10] - [0x8fee8, .rodata, ov_SC03_102_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff04, data, tail10] + - [0x8ff04, data, tail11] - [0x8ff28, .rodata, ov_SC03_102_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff44, data, tail11] + - [0x8ff44, data, tail12] - [0x8ff5c, .rodata, ov_SC03_102_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff7c, data, tail12] + - [0x8ff7c, data, tail13] - [0x8fffc, .rodata, ov_SC03_102_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90010, data, tail13] + - [0x90010, data, tail14] - [0x901b8, .rodata, ov_SC03_102_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90330, data, tail14] + - [0x90330, data, tail15] - [0x903c0, .rodata, ov_SC03_102_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9044c, data, tail15] + - [0x9044c, data, tail16] - [0x90464, .rodata, ov_SC03_102_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90484, data, tail16] + - [0x90484, data, tail17] - [0x91ACC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x91ACF] # 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_103.yaml b/config/splat.ov_SC03_103.yaml index 2e9c28a45..f71979d4e 100644 --- a/config/splat.ov_SC03_103.yaml +++ b/config/splat.ov_SC03_103.yaml @@ -97,6 +97,7 @@ segments: - [0x2b88, c, ov_SC03_103_jr_8012ACE0] - [0xff88, c, ov_SC03_103_jr_801380E0] - [0x171f8, c, ov_SC03_103_jr_8013F350] + - [0x184b0, c, ov_SC03_103_jr_80140608] - [0x1CA44, c, ov_SC03_103_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_103_after] - [0x2c2f4, c, ov_SC03_103_jr_8015444C] @@ -118,29 +119,31 @@ segments: - [0x9a79c, data, tail3] - [0x9ada8, .rodata, ov_SC03_103_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9addc, data, tail4] + - [0x9ae50, .rodata, ov_SC03_103_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ae64, data, tail5] - [0x9ae7c, .rodata, ov_SC03_103_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9aee8, data, tail5] + - [0x9aee8, data, tail6] - [0x9af58, .rodata, ov_SC03_103_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9af9c, .rodata, ov_SC03_103_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9afe4, data, tail6] + - [0x9afe4, data, tail7] - [0x9b044, .rodata, ov_SC03_103_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b078, data, tail7] + - [0x9b078, data, tail8] - [0x9b07c, .rodata, ov_SC03_103_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b098, data, tail8] + - [0x9b098, data, tail9] - [0x9b09c, .rodata, ov_SC03_103_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b0b8, data, tail9] + - [0x9b0b8, data, tail10] - [0x9b0dc, .rodata, ov_SC03_103_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b0f8, data, tail10] + - [0x9b0f8, data, tail11] - [0x9b110, .rodata, ov_SC03_103_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b130, data, tail11] + - [0x9b130, data, tail12] - [0x9b1b0, .rodata, ov_SC03_103_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b1c4, data, tail12] + - [0x9b1c4, data, tail13] - [0x9b36c, .rodata, ov_SC03_103_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b4e4, data, tail13] + - [0x9b4e4, data, tail14] - [0x9b574, .rodata, ov_SC03_103_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b600, data, tail14] + - [0x9b600, data, tail15] - [0x9b618, .rodata, ov_SC03_103_jr_8017C294] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b638, data, tail15] + - [0x9b638, data, tail16] - [0x9CC7C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9CC7F] # 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_104.yaml b/config/splat.ov_SC03_104.yaml index be71e6c98..43d5f5d1b 100644 --- a/config/splat.ov_SC03_104.yaml +++ b/config/splat.ov_SC03_104.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_104_jr_801380E0] - [0x171f8, c, ov_SC03_104_jr_8013F350] - [0x17e80, c, ov_SC03_104_jr_8013FFD8] + - [0x184b0, c, ov_SC03_104_jr_80140608] - [0x1CA44, c, ov_SC03_104_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_104_after] - [0x2c2f4, c, ov_SC03_104_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9633c, data, tail4] - [0x96340, .rodata, ov_SC03_104_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96374, data, tail5] + - [0x963b0, .rodata, ov_SC03_104_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x963c4, data, tail6] - [0x963dc, .rodata, ov_SC03_104_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96448, data, tail6] + - [0x96448, data, tail7] - [0x964b8, .rodata, ov_SC03_104_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x964fc, .rodata, ov_SC03_104_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96544, data, tail7] + - [0x96544, data, tail8] - [0x965a4, .rodata, ov_SC03_104_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x965d8, data, tail8] + - [0x965d8, data, tail9] - [0x965dc, .rodata, ov_SC03_104_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x965f8, data, tail9] + - [0x965f8, data, tail10] - [0x965fc, .rodata, ov_SC03_104_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96618, data, tail10] + - [0x96618, data, tail11] - [0x9663c, .rodata, ov_SC03_104_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96658, data, tail11] + - [0x96658, data, tail12] - [0x96670, .rodata, ov_SC03_104_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96690, data, tail12] + - [0x96690, data, tail13] - [0x96710, .rodata, ov_SC03_104_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96724, data, tail13] + - [0x96724, data, tail14] - [0x968cc, .rodata, ov_SC03_104_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96a44, data, tail14] + - [0x96a44, data, tail15] - [0x96ad4, .rodata, ov_SC03_104_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96b60, data, tail15] + - [0x96b60, data, tail16] - [0x96b78, .rodata, ov_SC03_104_jr_8017CA80] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96b98, data, tail16] + - [0x96b98, data, tail17] - [0x9833C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9833F] # 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_105.yaml b/config/splat.ov_SC03_105.yaml index 7736fcae8..b39693b53 100644 --- a/config/splat.ov_SC03_105.yaml +++ b/config/splat.ov_SC03_105.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_105_jr_801380E0] - [0x171f8, c, ov_SC03_105_jr_8013F350] - [0x17e80, c, ov_SC03_105_jr_8013FFD8] + - [0x184b0, c, ov_SC03_105_jr_80140608] - [0x1CA44, c, ov_SC03_105_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_105_after] - [0x2c2f4, c, ov_SC03_105_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8f634, data, tail4] - [0x8f638, .rodata, ov_SC03_105_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f66c, data, tail5] + - [0x8f6a8, .rodata, ov_SC03_105_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f6bc, data, tail6] - [0x8f6d4, .rodata, ov_SC03_105_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f740, data, tail6] + - [0x8f740, data, tail7] - [0x8f7b0, .rodata, ov_SC03_105_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f7f4, .rodata, ov_SC03_105_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f83c, data, tail7] + - [0x8f83c, data, tail8] - [0x8f89c, .rodata, ov_SC03_105_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f8d0, data, tail8] + - [0x8f8d0, data, tail9] - [0x8f8d4, .rodata, ov_SC03_105_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f8f0, data, tail9] + - [0x8f8f0, data, tail10] - [0x8f8f4, .rodata, ov_SC03_105_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f910, data, tail10] + - [0x8f910, data, tail11] - [0x8f934, .rodata, ov_SC03_105_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f950, data, tail11] + - [0x8f950, data, tail12] - [0x8f968, .rodata, ov_SC03_105_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f988, data, tail12] + - [0x8f988, data, tail13] - [0x8fa08, .rodata, ov_SC03_105_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fa1c, data, tail13] + - [0x8fa1c, data, tail14] - [0x8fbc4, .rodata, ov_SC03_105_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fd3c, data, tail14] + - [0x8fd3c, data, tail15] - [0x8fdcc, .rodata, ov_SC03_105_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fe58, data, tail15] + - [0x8fe58, data, tail16] - [0x8ffa8, .rodata, ov_SC03_105_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ffc8, data, tail16] + - [0x8ffc8, data, tail17] - [0x94BC4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x94BC7] # 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_108.yaml b/config/splat.ov_SC03_108.yaml index f9c470167..a7431d3aa 100644 --- a/config/splat.ov_SC03_108.yaml +++ b/config/splat.ov_SC03_108.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_108_jr_801380E0] - [0x171f8, c, ov_SC03_108_jr_8013F350] - [0x17e80, c, ov_SC03_108_jr_8013FFD8] + - [0x184b0, c, ov_SC03_108_jr_80140608] - [0x1CA44, c, ov_SC03_108_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_108_after] - [0x2c2f4, c, ov_SC03_108_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x77b3c, data, tail4] - [0x77b40, .rodata, ov_SC03_108_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77b74, data, tail5] + - [0x77bb0, .rodata, ov_SC03_108_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77bc4, data, tail6] - [0x77bdc, .rodata, ov_SC03_108_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77c48, data, tail6] + - [0x77c48, data, tail7] - [0x77cb8, .rodata, ov_SC03_108_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77cfc, .rodata, ov_SC03_108_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77d44, data, tail7] + - [0x77d44, data, tail8] - [0x77da4, .rodata, ov_SC03_108_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77dd8, data, tail8] + - [0x77dd8, data, tail9] - [0x77ddc, .rodata, ov_SC03_108_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77df8, data, tail9] + - [0x77df8, data, tail10] - [0x77dfc, .rodata, ov_SC03_108_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e18, data, tail10] + - [0x77e18, data, tail11] - [0x77e3c, .rodata, ov_SC03_108_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e58, data, tail11] + - [0x77e58, data, tail12] - [0x77e70, .rodata, ov_SC03_108_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e90, data, tail12] + - [0x77e90, data, tail13] - [0x77f10, .rodata, ov_SC03_108_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77f24, data, tail13] + - [0x77f24, data, tail14] - [0x780cc, .rodata, ov_SC03_108_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78244, data, tail14] + - [0x78244, data, tail15] - [0x782d4, .rodata, ov_SC03_108_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78360, data, tail15] + - [0x78360, data, tail16] - [0x78378, .rodata, ov_SC03_108_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78398, data, tail16] + - [0x78398, data, tail17] - [0x7994C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7994F] # 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_109.yaml b/config/splat.ov_SC03_109.yaml index 8deea5794..fd504a68c 100644 --- a/config/splat.ov_SC03_109.yaml +++ b/config/splat.ov_SC03_109.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_109_jr_801380E0] - [0x171f8, c, ov_SC03_109_jr_8013F350] - [0x17e80, c, ov_SC03_109_jr_8013FFD8] + - [0x184b0, c, ov_SC03_109_jr_80140608] - [0x1CA44, c, ov_SC03_109_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_109_after] - [0x2c2f4, c, ov_SC03_109_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x7064c, data, tail4] - [0x70650, .rodata, ov_SC03_109_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70684, data, tail5] + - [0x706c0, .rodata, ov_SC03_109_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x706d4, data, tail6] - [0x706ec, .rodata, ov_SC03_109_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70758, data, tail6] + - [0x70758, data, tail7] - [0x707c8, .rodata, ov_SC03_109_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7080c, .rodata, ov_SC03_109_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70854, data, tail7] + - [0x70854, data, tail8] - [0x708b4, .rodata, ov_SC03_109_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x708e8, data, tail8] + - [0x708e8, data, tail9] - [0x708ec, .rodata, ov_SC03_109_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70908, data, tail9] + - [0x70908, data, tail10] - [0x7090c, .rodata, ov_SC03_109_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70928, data, tail10] + - [0x70928, data, tail11] - [0x7094c, .rodata, ov_SC03_109_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70968, data, tail11] + - [0x70968, data, tail12] - [0x70980, .rodata, ov_SC03_109_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x709a0, data, tail12] + - [0x709a0, data, tail13] - [0x70a20, .rodata, ov_SC03_109_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70a34, data, tail13] + - [0x70a34, data, tail14] - [0x70bdc, .rodata, ov_SC03_109_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d54, data, tail14] + - [0x70d54, data, tail15] - [0x70de4, .rodata, ov_SC03_109_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70e70, data, tail15] + - [0x70e70, data, tail16] - [0x70e88, .rodata, ov_SC03_109_jr_8017C180] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70ea8, data, tail16] + - [0x70ea8, data, tail17] - [0x72354, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x72357] # 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_110.yaml b/config/splat.ov_SC03_110.yaml index 23ba99c9e..9d7e01f4d 100644 --- a/config/splat.ov_SC03_110.yaml +++ b/config/splat.ov_SC03_110.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_110_jr_801380E0] - [0x171f8, c, ov_SC03_110_jr_8013F350] - [0x17e80, c, ov_SC03_110_jr_8013FFD8] + - [0x184b0, c, ov_SC03_110_jr_80140608] - [0x1CA44, c, ov_SC03_110_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_110_after] - [0x2c2f4, c, ov_SC03_110_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x782e8, data, tail4] - [0x782ec, .rodata, ov_SC03_110_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x78320, data, tail5] + - [0x7835c, .rodata, ov_SC03_110_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x78370, data, tail6] - [0x78388, .rodata, ov_SC03_110_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x783f4, data, tail6] + - [0x783f4, data, tail7] - [0x78464, .rodata, ov_SC03_110_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x784a8, .rodata, ov_SC03_110_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x784f0, data, tail7] + - [0x784f0, data, tail8] - [0x78550, .rodata, ov_SC03_110_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78584, data, tail8] + - [0x78584, data, tail9] - [0x78588, .rodata, ov_SC03_110_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x785a4, data, tail9] + - [0x785a4, data, tail10] - [0x785a8, .rodata, ov_SC03_110_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x785c4, data, tail10] + - [0x785c4, data, tail11] - [0x785e8, .rodata, ov_SC03_110_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78604, data, tail11] + - [0x78604, data, tail12] - [0x7861c, .rodata, ov_SC03_110_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7863c, data, tail12] + - [0x7863c, data, tail13] - [0x786bc, .rodata, ov_SC03_110_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x786d0, data, tail13] + - [0x786d0, data, tail14] - [0x78878, .rodata, ov_SC03_110_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x789f0, data, tail14] + - [0x789f0, data, tail15] - [0x78a80, .rodata, ov_SC03_110_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78b0c, data, tail15] + - [0x78b0c, data, tail16] - [0x78b24, .rodata, ov_SC03_110_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78b44, data, tail16] + - [0x78b44, data, tail17] - [0x7A384, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7A387] # 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_111.yaml b/config/splat.ov_SC03_111.yaml index b4aadc4b9..59c183818 100644 --- a/config/splat.ov_SC03_111.yaml +++ b/config/splat.ov_SC03_111.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_111_jr_801380E0] - [0x171f8, c, ov_SC03_111_jr_8013F350] - [0x17e80, c, ov_SC03_111_jr_8013FFD8] + - [0x184b0, c, ov_SC03_111_jr_80140608] - [0x1CA44, c, ov_SC03_111_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_111_after] - [0x2c2f4, c, ov_SC03_111_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8f868, data, tail4] - [0x8f86c, .rodata, ov_SC03_111_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f8a0, data, tail5] + - [0x8f8dc, .rodata, ov_SC03_111_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f8f0, data, tail6] - [0x8f908, .rodata, ov_SC03_111_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f974, data, tail6] + - [0x8f974, data, tail7] - [0x8f9e4, .rodata, ov_SC03_111_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8fa28, .rodata, ov_SC03_111_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fa70, data, tail7] + - [0x8fa70, data, tail8] - [0x8fad0, .rodata, ov_SC03_111_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb04, data, tail8] + - [0x8fb04, data, tail9] - [0x8fb08, .rodata, ov_SC03_111_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb24, data, tail9] + - [0x8fb24, data, tail10] - [0x8fb28, .rodata, ov_SC03_111_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb44, data, tail10] + - [0x8fb44, data, tail11] - [0x8fb68, .rodata, ov_SC03_111_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb84, data, tail11] + - [0x8fb84, data, tail12] - [0x8fb9c, .rodata, ov_SC03_111_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fbbc, data, tail12] + - [0x8fbbc, data, tail13] - [0x8fc3c, .rodata, ov_SC03_111_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fc50, data, tail13] + - [0x8fc50, data, tail14] - [0x8fdf8, .rodata, ov_SC03_111_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff70, data, tail14] + - [0x8ff70, data, tail15] - [0x90000, .rodata, ov_SC03_111_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9008c, data, tail15] + - [0x9008c, data, tail16] - [0x900a4, .rodata, ov_SC03_111_jr_8017EC58] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x900c4, data, tail16] + - [0x900c4, data, tail17] - [0x91A2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x91A2F] # 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_112.yaml b/config/splat.ov_SC03_112.yaml index 085990504..de6888aad 100644 --- a/config/splat.ov_SC03_112.yaml +++ b/config/splat.ov_SC03_112.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_112_jr_801380E0] - [0x171f8, c, ov_SC03_112_jr_8013F350] - [0x17e80, c, ov_SC03_112_jr_8013FFD8] + - [0x184b0, c, ov_SC03_112_jr_80140608] - [0x1CA44, c, ov_SC03_112_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_112_after] - [0x2c2f4, c, ov_SC03_112_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x82fd0, data, tail4] - [0x82fd4, .rodata, ov_SC03_112_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x83008, data, tail5] + - [0x83044, .rodata, ov_SC03_112_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x83058, data, tail6] - [0x83070, .rodata, ov_SC03_112_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x830dc, data, tail6] + - [0x830dc, data, tail7] - [0x8314c, .rodata, ov_SC03_112_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x83190, .rodata, ov_SC03_112_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x831d8, data, tail7] + - [0x831d8, data, tail8] - [0x83238, .rodata, ov_SC03_112_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8326c, data, tail8] + - [0x8326c, data, tail9] - [0x83270, .rodata, ov_SC03_112_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8328c, data, tail9] + - [0x8328c, data, tail10] - [0x83290, .rodata, ov_SC03_112_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x832ac, data, tail10] + - [0x832ac, data, tail11] - [0x832d0, .rodata, ov_SC03_112_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x832ec, data, tail11] + - [0x832ec, data, tail12] - [0x83304, .rodata, ov_SC03_112_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83324, data, tail12] + - [0x83324, data, tail13] - [0x833a4, .rodata, ov_SC03_112_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x833b8, data, tail13] + - [0x833b8, data, tail14] - [0x83560, .rodata, ov_SC03_112_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x836d8, data, tail14] + - [0x836d8, data, tail15] - [0x83768, .rodata, ov_SC03_112_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x837f4, data, tail15] + - [0x837f4, data, tail16] - [0x8380c, .rodata, ov_SC03_112_jr_8017C294] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8382c, data, tail16] + - [0x8382c, data, tail17] - [0x84FF4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x84FF7] # 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_113.yaml b/config/splat.ov_SC03_113.yaml index a8f61c9c4..1b247d05b 100644 --- a/config/splat.ov_SC03_113.yaml +++ b/config/splat.ov_SC03_113.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_113_jr_801380E0] - [0x171f8, c, ov_SC03_113_jr_8013F350] - [0x17e80, c, ov_SC03_113_jr_8013FFD8] + - [0x184b0, c, ov_SC03_113_jr_80140608] - [0x1CA44, c, ov_SC03_113_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_113_after] - [0x2c2f4, c, ov_SC03_113_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x7bc58, data, tail4] - [0x7bc5c, .rodata, ov_SC03_113_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7bc90, data, tail5] + - [0x7bccc, .rodata, ov_SC03_113_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bce0, data, tail6] - [0x7bcf8, .rodata, ov_SC03_113_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bd64, data, tail6] + - [0x7bd64, data, tail7] - [0x7bdd4, .rodata, ov_SC03_113_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7be18, .rodata, ov_SC03_113_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7be60, data, tail7] + - [0x7be60, data, tail8] - [0x7bec0, .rodata, ov_SC03_113_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bef4, data, tail8] + - [0x7bef4, data, tail9] - [0x7bef8, .rodata, ov_SC03_113_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bf14, data, tail9] + - [0x7bf14, data, tail10] - [0x7bf18, .rodata, ov_SC03_113_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bf34, data, tail10] + - [0x7bf34, data, tail11] - [0x7bf58, .rodata, ov_SC03_113_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bf74, data, tail11] + - [0x7bf74, data, tail12] - [0x7bf8c, .rodata, ov_SC03_113_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bfac, data, tail12] + - [0x7bfac, data, tail13] - [0x7c02c, .rodata, ov_SC03_113_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c040, data, tail13] + - [0x7c040, data, tail14] - [0x7c1e8, .rodata, ov_SC03_113_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c360, data, tail14] + - [0x7c360, data, tail15] - [0x7c3f0, .rodata, ov_SC03_113_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c47c, data, tail15] + - [0x7c47c, data, tail16] - [0x7c494, .rodata, ov_SC03_113_jr_8017C294] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c4b4, data, tail16] + - [0x7c4b4, data, tail17] - [0x7DB94, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7DB97] # 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_114.yaml b/config/splat.ov_SC03_114.yaml index 296d73598..05ad65a8a 100644 --- a/config/splat.ov_SC03_114.yaml +++ b/config/splat.ov_SC03_114.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_114_jr_801380E0] - [0x171f8, c, ov_SC03_114_jr_8013F350] - [0x17e80, c, ov_SC03_114_jr_8013FFD8] + - [0x184b0, c, ov_SC03_114_jr_80140608] - [0x1CA44, c, ov_SC03_114_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_114_after] - [0x2c2f4, c, ov_SC03_114_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x7f964, data, tail4] - [0x7f968, .rodata, ov_SC03_114_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7f99c, data, tail5] + - [0x7f9d8, .rodata, ov_SC03_114_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7f9ec, data, tail6] - [0x7fa04, .rodata, ov_SC03_114_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fa70, data, tail6] + - [0x7fa70, data, tail7] - [0x7fae0, .rodata, ov_SC03_114_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fb24, .rodata, ov_SC03_114_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fb6c, data, tail7] + - [0x7fb6c, data, tail8] - [0x7fbcc, .rodata, ov_SC03_114_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fc00, data, tail8] + - [0x7fc00, data, tail9] - [0x7fc04, .rodata, ov_SC03_114_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fc20, data, tail9] + - [0x7fc20, data, tail10] - [0x7fc24, .rodata, ov_SC03_114_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fc40, data, tail10] + - [0x7fc40, data, tail11] - [0x7fc64, .rodata, ov_SC03_114_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fc80, data, tail11] + - [0x7fc80, data, tail12] - [0x7fc98, .rodata, ov_SC03_114_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fcb8, data, tail12] + - [0x7fcb8, data, tail13] - [0x7fd38, .rodata, ov_SC03_114_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fd4c, data, tail13] + - [0x7fd4c, data, tail14] - [0x7fef4, .rodata, ov_SC03_114_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8006c, data, tail14] + - [0x8006c, data, tail15] - [0x800fc, .rodata, ov_SC03_114_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80188, data, tail15] + - [0x80188, data, tail16] - [0x801a0, .rodata, ov_SC03_114_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x801c0, data, tail16] + - [0x801c0, data, tail17] - [0x8170C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8170F] # 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_115.yaml b/config/splat.ov_SC03_115.yaml index 9b1270833..0d81d8194 100644 --- a/config/splat.ov_SC03_115.yaml +++ b/config/splat.ov_SC03_115.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_115_jr_801380E0] - [0x171f8, c, ov_SC03_115_jr_8013F350] - [0x17e80, c, ov_SC03_115_jr_8013FFD8] + - [0x184b0, c, ov_SC03_115_jr_80140608] - [0x1CA44, c, ov_SC03_115_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_115_after] - [0x2c2f4, c, ov_SC03_115_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x6b2d8, data, tail4] - [0x6b2dc, .rodata, ov_SC03_115_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b310, data, tail5] + - [0x6b34c, .rodata, ov_SC03_115_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b360, data, tail6] - [0x6b378, .rodata, ov_SC03_115_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b3e4, data, tail6] + - [0x6b3e4, data, tail7] - [0x6b454, .rodata, ov_SC03_115_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b498, .rodata, ov_SC03_115_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b4e0, data, tail7] + - [0x6b4e0, data, tail8] - [0x6b540, .rodata, ov_SC03_115_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b574, data, tail8] + - [0x6b574, data, tail9] - [0x6b578, .rodata, ov_SC03_115_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b594, data, tail9] + - [0x6b594, data, tail10] - [0x6b598, .rodata, ov_SC03_115_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5b4, data, tail10] + - [0x6b5b4, data, tail11] - [0x6b5d8, .rodata, ov_SC03_115_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5f4, data, tail11] + - [0x6b5f4, data, tail12] - [0x6b60c, .rodata, ov_SC03_115_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b62c, data, tail12] + - [0x6b62c, data, tail13] - [0x6b6ac, .rodata, ov_SC03_115_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c0, data, tail13] + - [0x6b6c0, data, tail14] - [0x6b868, .rodata, ov_SC03_115_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e0, data, tail14] + - [0x6b9e0, data, tail15] - [0x6ba70, .rodata, ov_SC03_115_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6bafc, data, tail15] + - [0x6bafc, data, tail16] - [0x6bb14, .rodata, ov_SC03_115_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6bb34, data, tail16] + - [0x6bb34, data, tail17] - [0x6CFE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6CFE7] # 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_116.yaml b/config/splat.ov_SC03_116.yaml index bd28c9034..961463a2d 100644 --- a/config/splat.ov_SC03_116.yaml +++ b/config/splat.ov_SC03_116.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_116_jr_801380E0] - [0x171f8, c, ov_SC03_116_jr_8013F350] - [0x17e80, c, ov_SC03_116_jr_8013FFD8] + - [0x184b0, c, ov_SC03_116_jr_80140608] - [0x1CA44, c, ov_SC03_116_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_116_after] - [0x2c2f4, c, ov_SC03_116_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x6de74, data, tail4] - [0x6de78, .rodata, ov_SC03_116_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6deac, data, tail5] + - [0x6dee8, .rodata, ov_SC03_116_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6defc, data, tail6] - [0x6df14, .rodata, ov_SC03_116_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6df80, data, tail6] + - [0x6df80, data, tail7] - [0x6dff0, .rodata, ov_SC03_116_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e034, .rodata, ov_SC03_116_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e07c, data, tail7] + - [0x6e07c, data, tail8] - [0x6e0dc, .rodata, ov_SC03_116_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e110, data, tail8] + - [0x6e110, data, tail9] - [0x6e114, .rodata, ov_SC03_116_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e130, data, tail9] + - [0x6e130, data, tail10] - [0x6e134, .rodata, ov_SC03_116_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e150, data, tail10] + - [0x6e150, data, tail11] - [0x6e174, .rodata, ov_SC03_116_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e190, data, tail11] + - [0x6e190, data, tail12] - [0x6e1a8, .rodata, ov_SC03_116_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e1c8, data, tail12] + - [0x6e1c8, data, tail13] - [0x6e248, .rodata, ov_SC03_116_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e25c, data, tail13] + - [0x6e25c, data, tail14] - [0x6e404, .rodata, ov_SC03_116_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e57c, data, tail14] + - [0x6e57c, data, tail15] - [0x6e60c, .rodata, ov_SC03_116_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e698, data, tail15] + - [0x6e698, data, tail16] - [0x6FBF4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6FBF7] # 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_117.yaml b/config/splat.ov_SC03_117.yaml index 6a8475398..1b6103e0e 100644 --- a/config/splat.ov_SC03_117.yaml +++ b/config/splat.ov_SC03_117.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_117_jr_801380E0] - [0x171f8, c, ov_SC03_117_jr_8013F350] - [0x17e80, c, ov_SC03_117_jr_8013FFD8] + - [0x184b0, c, ov_SC03_117_jr_80140608] - [0x1CA44, c, ov_SC03_117_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_117_after] - [0x2c2f4, c, ov_SC03_117_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa4514, data, tail4] - [0xa4518, .rodata, ov_SC03_117_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa454c, data, tail5] + - [0xa4588, .rodata, ov_SC03_117_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa459c, data, tail6] - [0xa45b4, .rodata, ov_SC03_117_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4620, data, tail6] + - [0xa4620, data, tail7] - [0xa4690, .rodata, ov_SC03_117_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa46d4, .rodata, ov_SC03_117_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa471c, data, tail7] + - [0xa471c, data, tail8] - [0xa477c, .rodata, ov_SC03_117_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa47b0, data, tail8] + - [0xa47b0, data, tail9] - [0xa47b4, .rodata, ov_SC03_117_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa47d0, data, tail9] + - [0xa47d0, data, tail10] - [0xa47d4, .rodata, ov_SC03_117_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa47f0, data, tail10] + - [0xa47f0, data, tail11] - [0xa4814, .rodata, ov_SC03_117_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4830, data, tail11] + - [0xa4830, data, tail12] - [0xa4848, .rodata, ov_SC03_117_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4868, data, tail12] + - [0xa4868, data, tail13] - [0xa48e8, .rodata, ov_SC03_117_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa48fc, data, tail13] + - [0xa48fc, data, tail14] - [0xa4aa4, .rodata, ov_SC03_117_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4c1c, data, tail14] + - [0xa4c1c, data, tail15] - [0xa4cac, .rodata, ov_SC03_117_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4d38, data, tail15] + - [0xa4d38, data, tail16] - [0xa4d50, .rodata, ov_SC03_117_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4d70, data, tail16] + - [0xa4d70, data, tail17] - [0xA67EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA67EF] # 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_118.yaml b/config/splat.ov_SC03_118.yaml index c319caeb0..723c177a8 100644 --- a/config/splat.ov_SC03_118.yaml +++ b/config/splat.ov_SC03_118.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_118_jr_801380E0] - [0x171f8, c, ov_SC03_118_jr_8013F350] - [0x17e80, c, ov_SC03_118_jr_8013FFD8] + - [0x184b0, c, ov_SC03_118_jr_80140608] - [0x1CA44, c, ov_SC03_118_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_118_after] - [0x2c2f4, c, ov_SC03_118_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xaa470, data, tail4] - [0xaa474, .rodata, ov_SC03_118_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa4a8, data, tail5] + - [0xaa4e4, .rodata, ov_SC03_118_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa4f8, data, tail6] - [0xaa510, .rodata, ov_SC03_118_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa57c, data, tail6] + - [0xaa57c, data, tail7] - [0xaa5ec, .rodata, ov_SC03_118_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa630, .rodata, ov_SC03_118_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa678, data, tail7] + - [0xaa678, data, tail8] - [0xaa6d8, .rodata, ov_SC03_118_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa70c, data, tail8] + - [0xaa70c, data, tail9] - [0xaa710, .rodata, ov_SC03_118_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa72c, data, tail9] + - [0xaa72c, data, tail10] - [0xaa730, .rodata, ov_SC03_118_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa74c, data, tail10] + - [0xaa74c, data, tail11] - [0xaa770, .rodata, ov_SC03_118_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa78c, data, tail11] + - [0xaa78c, data, tail12] - [0xaa7a4, .rodata, ov_SC03_118_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa7c4, data, tail12] + - [0xaa7c4, data, tail13] - [0xaa844, .rodata, ov_SC03_118_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail13] + - [0xaa858, data, tail14] - [0xaaa00, .rodata, ov_SC03_118_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail14] + - [0xaab78, data, tail15] - [0xaac08, .rodata, ov_SC03_118_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaac94, data, tail15] + - [0xaac94, data, tail16] - [0xaacd8, .rodata, ov_SC03_118_jr_8017FB84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaacf8, data, tail16] + - [0xaacf8, data, tail17] - [0xAC6F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAC6F7] # 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_119.yaml b/config/splat.ov_SC03_119.yaml index 0cc379e45..5f60c5c82 100644 --- a/config/splat.ov_SC03_119.yaml +++ b/config/splat.ov_SC03_119.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_119_jr_801380E0] - [0x171f8, c, ov_SC03_119_jr_8013F350] - [0x17e80, c, ov_SC03_119_jr_8013FFD8] + - [0x184b0, c, ov_SC03_119_jr_80140608] - [0x1CA44, c, ov_SC03_119_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_119_after] - [0x2c2f4, c, ov_SC03_119_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xaa470, data, tail4] - [0xaa474, .rodata, ov_SC03_119_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa4a8, data, tail5] + - [0xaa4e4, .rodata, ov_SC03_119_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa4f8, data, tail6] - [0xaa510, .rodata, ov_SC03_119_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa57c, data, tail6] + - [0xaa57c, data, tail7] - [0xaa5ec, .rodata, ov_SC03_119_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa630, .rodata, ov_SC03_119_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa678, data, tail7] + - [0xaa678, data, tail8] - [0xaa6d8, .rodata, ov_SC03_119_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa70c, data, tail8] + - [0xaa70c, data, tail9] - [0xaa710, .rodata, ov_SC03_119_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa72c, data, tail9] + - [0xaa72c, data, tail10] - [0xaa730, .rodata, ov_SC03_119_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa74c, data, tail10] + - [0xaa74c, data, tail11] - [0xaa770, .rodata, ov_SC03_119_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa78c, data, tail11] + - [0xaa78c, data, tail12] - [0xaa7a4, .rodata, ov_SC03_119_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa7c4, data, tail12] + - [0xaa7c4, data, tail13] - [0xaa844, .rodata, ov_SC03_119_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail13] + - [0xaa858, data, tail14] - [0xaaa00, .rodata, ov_SC03_119_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail14] + - [0xaab78, data, tail15] - [0xaac08, .rodata, ov_SC03_119_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaac94, data, tail15] + - [0xaac94, data, tail16] - [0xaacd8, .rodata, ov_SC03_119_jr_8017FB84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaacf8, data, tail16] + - [0xaacf8, data, tail17] - [0xAC6F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAC6F7] # 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_121.yaml b/config/splat.ov_SC03_121.yaml index cbcfb0b4f..1d25971b9 100644 --- a/config/splat.ov_SC03_121.yaml +++ b/config/splat.ov_SC03_121.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_121_jr_801380E0] - [0x171f8, c, ov_SC03_121_jr_8013F350] - [0x17e80, c, ov_SC03_121_jr_8013FFD8] + - [0x184b0, c, ov_SC03_121_jr_80140608] - [0x1CA44, c, ov_SC03_121_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_121_after] - [0x2c2f4, c, ov_SC03_121_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x84f78, data, tail4] - [0x84f7c, .rodata, ov_SC03_121_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x84fb0, data, tail5] + - [0x84fec, .rodata, ov_SC03_121_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x85000, data, tail6] - [0x85018, .rodata, ov_SC03_121_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85084, data, tail6] + - [0x85084, data, tail7] - [0x850f4, .rodata, ov_SC03_121_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x85138, .rodata, ov_SC03_121_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85180, data, tail7] + - [0x85180, data, tail8] - [0x851e0, .rodata, ov_SC03_121_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85214, data, tail8] + - [0x85214, data, tail9] - [0x85218, .rodata, ov_SC03_121_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85234, data, tail9] + - [0x85234, data, tail10] - [0x85238, .rodata, ov_SC03_121_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85254, data, tail10] + - [0x85254, data, tail11] - [0x85278, .rodata, ov_SC03_121_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85294, data, tail11] + - [0x85294, data, tail12] - [0x852ac, .rodata, ov_SC03_121_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x852cc, data, tail12] + - [0x852cc, data, tail13] - [0x8534c, .rodata, ov_SC03_121_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85360, data, tail13] + - [0x85360, data, tail14] - [0x85508, .rodata, ov_SC03_121_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85680, data, tail14] + - [0x85680, data, tail15] - [0x85710, .rodata, ov_SC03_121_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8579c, data, tail15] + - [0x8579c, data, tail16] - [0x857b4, .rodata, ov_SC03_121_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x857d4, data, tail16] + - [0x857d4, data, tail17] - [0x86E54, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x86E57] # 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 ce8c30f6c..80dd58eb8 100644 --- a/config/splat.ov_SC03_124.yaml +++ b/config/splat.ov_SC03_124.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_124_jr_801380E0] - [0x171f8, c, ov_SC03_124_jr_8013F350] - [0x17e80, c, ov_SC03_124_jr_8013FFD8] + - [0x184b0, c, ov_SC03_124_jr_80140608] - [0x1CA44, c, ov_SC03_124_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_124_after] - [0x2c2f4, c, ov_SC03_124_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xb76cc, data, tail4] - [0xb76d0, .rodata, ov_SC03_124_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7704, data, tail5] + - [0xb7740, .rodata, ov_SC03_124_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7754, data, tail6] - [0xb776c, .rodata, ov_SC03_124_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb77d8, data, tail6] + - [0xb77d8, data, tail7] - [0xb7848, .rodata, ov_SC03_124_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb788c, .rodata, ov_SC03_124_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb78d4, data, tail7] + - [0xb78d4, data, tail8] - [0xb7934, .rodata, ov_SC03_124_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7968, data, tail8] + - [0xb7968, data, tail9] - [0xb796c, .rodata, ov_SC03_124_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7988, data, tail9] + - [0xb7988, data, tail10] - [0xb798c, .rodata, ov_SC03_124_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb79a8, data, tail10] + - [0xb79a8, data, tail11] - [0xb79cc, .rodata, ov_SC03_124_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb79e8, data, tail11] + - [0xb79e8, data, tail12] - [0xb7a00, .rodata, ov_SC03_124_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7a20, data, tail12] + - [0xb7a20, data, tail13] - [0xb7aa0, .rodata, ov_SC03_124_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7ab4, data, tail13] + - [0xb7ab4, data, tail14] - [0xb7c5c, .rodata, ov_SC03_124_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7dd4, data, tail14] + - [0xb7dd4, data, tail15] - [0xb7e64, .rodata, ov_SC03_124_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7ef0, data, tail15] + - [0xb7ef0, data, tail16] - [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_SC03_125.yaml b/config/splat.ov_SC03_125.yaml index ebe4584bd..bb432513b 100644 --- a/config/splat.ov_SC03_125.yaml +++ b/config/splat.ov_SC03_125.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_125_jr_801380E0] - [0x171f8, c, ov_SC03_125_jr_8013F350] - [0x17e80, c, ov_SC03_125_jr_8013FFD8] + - [0x184b0, c, ov_SC03_125_jr_80140608] - [0x1CA44, c, ov_SC03_125_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_125_after] - [0x2c2f4, c, ov_SC03_125_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9a3b8, data, tail4] - [0x9a3bc, .rodata, ov_SC03_125_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a3f0, data, tail5] + - [0x9a42c, .rodata, ov_SC03_125_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9a440, data, tail6] - [0x9a458, .rodata, ov_SC03_125_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a4c4, data, tail6] + - [0x9a4c4, data, tail7] - [0x9a534, .rodata, ov_SC03_125_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a578, .rodata, ov_SC03_125_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a5c0, data, tail7] + - [0x9a5c0, data, tail8] - [0x9a620, .rodata, ov_SC03_125_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a654, data, tail8] + - [0x9a654, data, tail9] - [0x9a658, .rodata, ov_SC03_125_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a674, data, tail9] + - [0x9a674, data, tail10] - [0x9a678, .rodata, ov_SC03_125_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a694, data, tail10] + - [0x9a694, data, tail11] - [0x9a6b8, .rodata, ov_SC03_125_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a6d4, data, tail11] + - [0x9a6d4, data, tail12] - [0x9a6ec, .rodata, ov_SC03_125_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a70c, data, tail12] + - [0x9a70c, data, tail13] - [0x9a78c, .rodata, ov_SC03_125_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a7a0, data, tail13] + - [0x9a7a0, data, tail14] - [0x9a948, .rodata, ov_SC03_125_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9aac0, data, tail14] + - [0x9aac0, data, tail15] - [0x9ab50, .rodata, ov_SC03_125_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9abdc, data, tail15] + - [0x9abdc, data, tail16] - [0x9abf4, .rodata, ov_SC03_125_jr_8017D604] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ac14, data, tail16] + - [0x9ac14, data, tail17] - [0x9C3E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9C3E7] # 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_126.yaml b/config/splat.ov_SC03_126.yaml index 67b989168..728cd6a4e 100644 --- a/config/splat.ov_SC03_126.yaml +++ b/config/splat.ov_SC03_126.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC03_126_jr_801380E0] - [0x171f8, c, ov_SC03_126_jr_8013F350] - [0x17e80, c, ov_SC03_126_jr_8013FFD8] + - [0x184b0, c, ov_SC03_126_jr_80140608] - [0x1CA44, c, ov_SC03_126_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_126_after] - [0x2c2f4, c, ov_SC03_126_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x65ca4, data, tail4] - [0x65ca8, .rodata, ov_SC03_126_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65cdc, data, tail5] + - [0x65d18, .rodata, ov_SC03_126_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65d2c, data, tail6] - [0x65d44, .rodata, ov_SC03_126_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65db0, data, tail6] + - [0x65db0, data, tail7] - [0x65e20, .rodata, ov_SC03_126_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65e64, .rodata, ov_SC03_126_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65eac, data, tail7] + - [0x65eac, data, tail8] - [0x65f0c, .rodata, ov_SC03_126_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f40, data, tail8] + - [0x65f40, data, tail9] - [0x65f44, .rodata, ov_SC03_126_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f60, data, tail9] + - [0x65f60, data, tail10] - [0x65f64, .rodata, ov_SC03_126_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail10] + - [0x65f80, data, tail11] - [0x65fa4, .rodata, ov_SC03_126_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fc0, data, tail11] + - [0x65fc0, data, tail12] - [0x65fd8, .rodata, ov_SC03_126_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65ff8, data, tail12] + - [0x65ff8, data, tail13] - [0x66078, .rodata, ov_SC03_126_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail13] + - [0x6608c, data, tail14] - [0x66234, .rodata, ov_SC03_126_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail14] + - [0x663ac, data, tail15] - [0x6643c, .rodata, ov_SC03_126_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x664c8, data, tail15] + - [0x664c8, data, tail16] - [0x66500, .rodata, ov_SC03_126_jr_8017D5C0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66520, data, tail16] + - [0x66520, data, tail17] - [0x679D4, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x679D5] # 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_000.yaml b/config/splat.ov_SC04_000.yaml index 97be08547..b02f5e427 100644 --- a/config/splat.ov_SC04_000.yaml +++ b/config/splat.ov_SC04_000.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_000_jr_801380E0] - [0x171f8, c, ov_SC04_000_jr_8013F350] - [0x17e80, c, ov_SC04_000_jr_8013FFD8] + - [0x184b0, c, ov_SC04_000_jr_80140608] - [0x1CA44, c, ov_SC04_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_000_after] - [0x2c2f4, c, ov_SC04_000_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x7fd20, data, tail4] - [0x7fd24, .rodata, ov_SC04_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fd58, data, tail5] + - [0x7fd94, .rodata, ov_SC04_000_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7fda8, data, tail6] - [0x7fdc0, .rodata, ov_SC04_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fe2c, data, tail6] + - [0x7fe2c, data, tail7] - [0x7fe9c, .rodata, ov_SC04_000_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fee0, .rodata, ov_SC04_000_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7ff28, data, tail7] + - [0x7ff28, data, tail8] - [0x7ff88, .rodata, ov_SC04_000_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7ffbc, data, tail8] + - [0x7ffbc, data, tail9] - [0x7ffc0, .rodata, ov_SC04_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7ffdc, data, tail9] + - [0x7ffdc, data, tail10] - [0x7ffe0, .rodata, ov_SC04_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fffc, data, tail10] + - [0x7fffc, data, tail11] - [0x80020, .rodata, ov_SC04_000_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8003c, data, tail11] + - [0x8003c, data, tail12] - [0x80054, .rodata, ov_SC04_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80074, data, tail12] + - [0x80074, data, tail13] - [0x800f4, .rodata, ov_SC04_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80108, data, tail13] + - [0x80108, data, tail14] - [0x802b0, .rodata, ov_SC04_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80428, data, tail14] + - [0x80428, data, tail15] - [0x804b8, .rodata, ov_SC04_000_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80544, data, tail15] + - [0x80544, data, tail16] - [0x8055c, .rodata, ov_SC04_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8057c, data, tail16] + - [0x8057c, data, tail17] - [0x82EFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x82EFF] # 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_002.yaml b/config/splat.ov_SC04_002.yaml index c57e85a95..f636efef5 100644 --- a/config/splat.ov_SC04_002.yaml +++ b/config/splat.ov_SC04_002.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_002_jr_801380E0] - [0x171f8, c, ov_SC04_002_jr_8013F350] - [0x17e80, c, ov_SC04_002_jr_8013FFD8] + - [0x184b0, c, ov_SC04_002_jr_80140608] - [0x1CA44, c, ov_SC04_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_002_after] - [0x2c2f4, c, ov_SC04_002_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x97070, data, tail4] - [0x97074, .rodata, ov_SC04_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x970a8, data, tail5] + - [0x970e4, .rodata, ov_SC04_002_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x970f8, data, tail6] - [0x97110, .rodata, ov_SC04_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9717c, data, tail6] + - [0x9717c, data, tail7] - [0x971ec, .rodata, ov_SC04_002_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97230, .rodata, ov_SC04_002_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97278, data, tail7] + - [0x97278, data, tail8] - [0x972d8, .rodata, ov_SC04_002_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9730c, data, tail8] + - [0x9730c, data, tail9] - [0x97310, .rodata, ov_SC04_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9732c, data, tail9] + - [0x9732c, data, tail10] - [0x97330, .rodata, ov_SC04_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9734c, data, tail10] + - [0x9734c, data, tail11] - [0x97370, .rodata, ov_SC04_002_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9738c, data, tail11] + - [0x9738c, data, tail12] - [0x973a4, .rodata, ov_SC04_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x973c4, data, tail12] + - [0x973c4, data, tail13] - [0x97444, .rodata, ov_SC04_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97458, data, tail13] + - [0x97458, data, tail14] - [0x97600, .rodata, ov_SC04_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97778, data, tail14] + - [0x97778, data, tail15] - [0x97808, .rodata, ov_SC04_002_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97894, data, tail15] + - [0x97894, data, tail16] - [0x978ac, .rodata, ov_SC04_002_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x978cc, data, tail16] + - [0x978cc, data, tail17] - [0x995DC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x995DF] # 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_003.yaml b/config/splat.ov_SC04_003.yaml index e8f6cf60d..beb65a8d3 100644 --- a/config/splat.ov_SC04_003.yaml +++ b/config/splat.ov_SC04_003.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_003_jr_801380E0] - [0x171f8, c, ov_SC04_003_jr_8013F350] - [0x17e80, c, ov_SC04_003_jr_8013FFD8] + - [0x184b0, c, ov_SC04_003_jr_80140608] - [0x1CA44, c, ov_SC04_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_003_after] - [0x2c2f4, c, ov_SC04_003_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x71cec, data, tail4] - [0x71cf0, .rodata, ov_SC04_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71d24, data, tail5] + - [0x71d60, .rodata, ov_SC04_003_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71d74, data, tail6] - [0x71d8c, .rodata, ov_SC04_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71df8, data, tail6] + - [0x71df8, data, tail7] - [0x71e68, .rodata, ov_SC04_003_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71eac, .rodata, ov_SC04_003_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71ef4, data, tail7] + - [0x71ef4, data, tail8] - [0x71f54, .rodata, ov_SC04_003_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71f88, data, tail8] + - [0x71f88, data, tail9] - [0x71f8c, .rodata, ov_SC04_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71fa8, data, tail9] + - [0x71fa8, data, tail10] - [0x71fac, .rodata, ov_SC04_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71fc8, data, tail10] + - [0x71fc8, data, tail11] - [0x71fec, .rodata, ov_SC04_003_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72008, data, tail11] + - [0x72008, data, tail12] - [0x72020, .rodata, ov_SC04_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72040, data, tail12] + - [0x72040, data, tail13] - [0x720c0, .rodata, ov_SC04_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x720d4, data, tail13] + - [0x720d4, data, tail14] - [0x7227c, .rodata, ov_SC04_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723f4, data, tail14] + - [0x723f4, data, tail15] - [0x72484, .rodata, ov_SC04_003_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72510, data, tail15] + - [0x72510, data, tail16] - [0x72528, .rodata, ov_SC04_003_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72548, data, tail16] + - [0x72548, data, tail17] - [0x73A94, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x73A97] # 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_004.yaml b/config/splat.ov_SC04_004.yaml index 60dfea627..64e4ab260 100644 --- a/config/splat.ov_SC04_004.yaml +++ b/config/splat.ov_SC04_004.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_004_jr_801380E0] - [0x171f8, c, ov_SC04_004_jr_8013F350] - [0x17e80, c, ov_SC04_004_jr_8013FFD8] + - [0x184b0, c, ov_SC04_004_jr_80140608] - [0x1CA44, c, ov_SC04_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_004_after] - [0x2c2f4, c, ov_SC04_004_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x89ae8, data, tail4] - [0x89aec, .rodata, ov_SC04_004_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89b20, data, tail5] + - [0x89b5c, .rodata, ov_SC04_004_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x89b70, data, tail6] - [0x89b88, .rodata, ov_SC04_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89bf4, data, tail6] + - [0x89bf4, data, tail7] - [0x89c64, .rodata, ov_SC04_004_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89ca8, .rodata, ov_SC04_004_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89cf0, data, tail7] + - [0x89cf0, data, tail8] - [0x89d50, .rodata, ov_SC04_004_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89d84, data, tail8] + - [0x89d84, data, tail9] - [0x89d88, .rodata, ov_SC04_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89da4, data, tail9] + - [0x89da4, data, tail10] - [0x89da8, .rodata, ov_SC04_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89dc4, data, tail10] + - [0x89dc4, data, tail11] - [0x89de8, .rodata, ov_SC04_004_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89e04, data, tail11] + - [0x89e04, data, tail12] - [0x89e1c, .rodata, ov_SC04_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89e3c, data, tail12] + - [0x89e3c, data, tail13] - [0x89ebc, .rodata, ov_SC04_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89ed0, data, tail13] + - [0x89ed0, data, tail14] - [0x8a078, .rodata, ov_SC04_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a1f0, data, tail14] + - [0x8a1f0, data, tail15] - [0x8a280, .rodata, ov_SC04_004_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a30c, data, tail15] + - [0x8a30c, data, tail16] - [0x8BAFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8BAFF] # 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_005.yaml b/config/splat.ov_SC04_005.yaml index 7f30094b6..e1dc26405 100644 --- a/config/splat.ov_SC04_005.yaml +++ b/config/splat.ov_SC04_005.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_005_jr_801380E0] - [0x171f8, c, ov_SC04_005_jr_8013F350] - [0x17e80, c, ov_SC04_005_jr_8013FFD8] + - [0x184b0, c, ov_SC04_005_jr_80140608] - [0x1CA44, c, ov_SC04_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_005_after] - [0x2c2f4, c, ov_SC04_005_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x97cac, data, tail4] - [0x97cb0, .rodata, ov_SC04_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97ce4, data, tail5] + - [0x97d20, .rodata, ov_SC04_005_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97d34, data, tail6] - [0x97d4c, .rodata, ov_SC04_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97db8, data, tail6] + - [0x97db8, data, tail7] - [0x97e28, .rodata, ov_SC04_005_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97e6c, .rodata, ov_SC04_005_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97eb4, data, tail7] + - [0x97eb4, data, tail8] - [0x97f14, .rodata, ov_SC04_005_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97f48, data, tail8] + - [0x97f48, data, tail9] - [0x97f4c, .rodata, ov_SC04_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97f68, data, tail9] + - [0x97f68, data, tail10] - [0x97f6c, .rodata, ov_SC04_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97f88, data, tail10] + - [0x97f88, data, tail11] - [0x97fac, .rodata, ov_SC04_005_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97fc8, data, tail11] + - [0x97fc8, data, tail12] - [0x97fe0, .rodata, ov_SC04_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x98000, data, tail12] + - [0x98000, data, tail13] - [0x98080, .rodata, ov_SC04_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x98094, data, tail13] + - [0x98094, data, tail14] - [0x9823c, .rodata, ov_SC04_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x983b4, data, tail14] + - [0x983b4, data, tail15] - [0x98444, .rodata, ov_SC04_005_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x984d0, data, tail15] + - [0x984d0, data, tail16] - [0x984e8, .rodata, ov_SC04_005_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x98508, data, tail16] + - [0x98508, data, tail17] - [0x9A1D4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9A1D7] # 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_006.yaml b/config/splat.ov_SC04_006.yaml index 1d97a0375..ce85ab4ee 100644 --- a/config/splat.ov_SC04_006.yaml +++ b/config/splat.ov_SC04_006.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_006_jr_801380E0] - [0x171f8, c, ov_SC04_006_jr_8013F350] - [0x17e80, c, ov_SC04_006_jr_8013FFD8] + - [0x184b0, c, ov_SC04_006_jr_80140608] - [0x1CA44, c, ov_SC04_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_006_after] - [0x2c2f4, c, ov_SC04_006_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x73f54, data, tail4] - [0x73f58, .rodata, ov_SC04_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73f8c, data, tail5] + - [0x73fc8, .rodata, ov_SC04_006_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73fdc, data, tail6] - [0x73ff4, .rodata, ov_SC04_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74060, data, tail6] + - [0x74060, data, tail7] - [0x740d0, .rodata, ov_SC04_006_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x74114, .rodata, ov_SC04_006_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7415c, data, tail7] + - [0x7415c, data, tail8] - [0x741bc, .rodata, ov_SC04_006_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x741f0, data, tail8] + - [0x741f0, data, tail9] - [0x741f4, .rodata, ov_SC04_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74210, data, tail9] + - [0x74210, data, tail10] - [0x74214, .rodata, ov_SC04_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74230, data, tail10] + - [0x74230, data, tail11] - [0x74254, .rodata, ov_SC04_006_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74270, data, tail11] + - [0x74270, data, tail12] - [0x74288, .rodata, ov_SC04_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x742a8, data, tail12] + - [0x742a8, data, tail13] - [0x74328, .rodata, ov_SC04_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7433c, data, tail13] + - [0x7433c, data, tail14] - [0x744e4, .rodata, ov_SC04_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7465c, data, tail14] + - [0x7465c, data, tail15] - [0x746ec, .rodata, ov_SC04_006_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74778, data, tail15] + - [0x74778, data, tail16] - [0x74790, .rodata, ov_SC04_006_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x747b0, data, tail16] + - [0x747b0, data, tail17] - [0x75C74, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x75C77] # 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_007.yaml b/config/splat.ov_SC04_007.yaml index 9abb57494..9947f1fda 100644 --- a/config/splat.ov_SC04_007.yaml +++ b/config/splat.ov_SC04_007.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_007_jr_801380E0] - [0x171f8, c, ov_SC04_007_jr_8013F350] - [0x17e80, c, ov_SC04_007_jr_8013FFD8] + - [0x184b0, c, ov_SC04_007_jr_80140608] - [0x1CA44, c, ov_SC04_007_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_007_after] - [0x2c2f4, c, ov_SC04_007_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8b510, data, tail4] - [0x8b514, .rodata, ov_SC04_007_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8b548, data, tail5] + - [0x8b584, .rodata, ov_SC04_007_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8b598, data, tail6] - [0x8b5b0, .rodata, ov_SC04_007_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b61c, data, tail6] + - [0x8b61c, data, tail7] - [0x8b68c, .rodata, ov_SC04_007_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8b6d0, .rodata, ov_SC04_007_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b718, data, tail7] + - [0x8b718, data, tail8] - [0x8b778, .rodata, ov_SC04_007_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b7ac, data, tail8] + - [0x8b7ac, data, tail9] - [0x8b7b0, .rodata, ov_SC04_007_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b7cc, data, tail9] + - [0x8b7cc, data, tail10] - [0x8b7d0, .rodata, ov_SC04_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b7ec, data, tail10] + - [0x8b7ec, data, tail11] - [0x8b810, .rodata, ov_SC04_007_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b82c, data, tail11] + - [0x8b82c, data, tail12] - [0x8b844, .rodata, ov_SC04_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b864, data, tail12] + - [0x8b864, data, tail13] - [0x8b8e4, .rodata, ov_SC04_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b8f8, data, tail13] + - [0x8b8f8, data, tail14] - [0x8baa0, .rodata, ov_SC04_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8bc18, data, tail14] + - [0x8bc18, data, tail15] - [0x8bca8, .rodata, ov_SC04_007_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8bd34, data, tail15] + - [0x8bd34, data, tail16] - [0x8bd4c, .rodata, ov_SC04_007_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8bd6c, data, tail16] + - [0x8bd6c, data, tail17] - [0x8DA34, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8DA37] # 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_008.yaml b/config/splat.ov_SC04_008.yaml index b79ddba5d..4aa7e7181 100644 --- a/config/splat.ov_SC04_008.yaml +++ b/config/splat.ov_SC04_008.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_008_jr_801380E0] - [0x171f8, c, ov_SC04_008_jr_8013F350] - [0x17e80, c, ov_SC04_008_jr_8013FFD8] + - [0x184b0, c, ov_SC04_008_jr_80140608] - [0x1CA44, c, ov_SC04_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_008_after] - [0x2c2f4, c, ov_SC04_008_jr_8015444C] @@ -119,25 +120,27 @@ segments: - [0x681f8, data, tail4] - [0x681fc, .rodata, ov_SC04_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68230, data, tail5] + - [0x6826c, .rodata, ov_SC04_008_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68280, data, tail6] - [0x68298, .rodata, ov_SC04_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68304, data, tail6] + - [0x68304, data, tail7] - [0x68374, .rodata, ov_SC04_008_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x683b8, .rodata, ov_SC04_008_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68400, data, tail7] + - [0x68400, data, tail8] - [0x68460, .rodata, ov_SC04_008_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68494, data, tail8] + - [0x68494, data, tail9] - [0x684b8, .rodata, ov_SC04_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x684d4, data, tail9] + - [0x684d4, data, tail10] - [0x684f8, .rodata, ov_SC04_008_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68514, data, tail10] + - [0x68514, data, tail11] - [0x6852c, .rodata, ov_SC04_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6854c, data, tail11] + - [0x6854c, data, tail12] - [0x685cc, .rodata, ov_SC04_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x685e0, data, tail12] + - [0x685e0, data, tail13] - [0x68788, .rodata, ov_SC04_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68900, data, tail13] + - [0x68900, data, tail14] - [0x68990, .rodata, ov_SC04_008_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68a1c, data, tail14] + - [0x68a1c, data, tail15] - [0x6B364, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6B367] # 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_009.yaml b/config/splat.ov_SC04_009.yaml index 57cce2a36..a8e059c4d 100644 --- a/config/splat.ov_SC04_009.yaml +++ b/config/splat.ov_SC04_009.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_009_jr_801380E0] - [0x171f8, c, ov_SC04_009_jr_8013F350] - [0x17e80, c, ov_SC04_009_jr_8013FFD8] + - [0x184b0, c, ov_SC04_009_jr_80140608] - [0x1CA44, c, ov_SC04_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_009_after] - [0x2c2f4, c, ov_SC04_009_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x6e40c, data, tail4] - [0x6e410, .rodata, ov_SC04_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e444, data, tail5] + - [0x6e480, .rodata, ov_SC04_009_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e494, data, tail6] - [0x6e4ac, .rodata, ov_SC04_009_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e518, data, tail6] + - [0x6e518, data, tail7] - [0x6e588, .rodata, ov_SC04_009_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e5cc, .rodata, ov_SC04_009_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e614, data, tail7] + - [0x6e614, data, tail8] - [0x6e674, .rodata, ov_SC04_009_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e6a8, data, tail8] + - [0x6e6a8, data, tail9] - [0x6e6ac, .rodata, ov_SC04_009_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e6c8, data, tail9] + - [0x6e6c8, data, tail10] - [0x6e6cc, .rodata, ov_SC04_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e6e8, data, tail10] + - [0x6e6e8, data, tail11] - [0x6e70c, .rodata, ov_SC04_009_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e728, data, tail11] + - [0x6e728, data, tail12] - [0x6e740, .rodata, ov_SC04_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e760, data, tail12] + - [0x6e760, data, tail13] - [0x6e7e0, .rodata, ov_SC04_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e7f4, data, tail13] + - [0x6e7f4, data, tail14] - [0x6e99c, .rodata, ov_SC04_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6eb14, data, tail14] + - [0x6eb14, data, tail15] - [0x6eba4, .rodata, ov_SC04_009_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ec30, data, tail15] + - [0x6ec30, data, tail16] - [0x6ec48, .rodata, ov_SC04_009_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ec68, data, tail16] + - [0x6ec68, data, tail17] - [0x70114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x70117] # 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_010.yaml b/config/splat.ov_SC04_010.yaml index 09db69360..b69865288 100644 --- a/config/splat.ov_SC04_010.yaml +++ b/config/splat.ov_SC04_010.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_010_jr_801380E0] - [0x171f8, c, ov_SC04_010_jr_8013F350] - [0x17e80, c, ov_SC04_010_jr_8013FFD8] + - [0x184b0, c, ov_SC04_010_jr_80140608] - [0x1CA44, c, ov_SC04_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_010_after] - [0x2c2f4, c, ov_SC04_010_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x65898, data, tail4] - [0x6589c, .rodata, ov_SC04_010_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x658d0, data, tail5] + - [0x6590c, .rodata, ov_SC04_010_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65920, data, tail6] - [0x65938, .rodata, ov_SC04_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x659a4, data, tail6] + - [0x659a4, data, tail7] - [0x65a14, .rodata, ov_SC04_010_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65a58, .rodata, ov_SC04_010_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65aa0, data, tail7] + - [0x65aa0, data, tail8] - [0x65b00, .rodata, ov_SC04_010_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65b34, data, tail8] + - [0x65b34, data, tail9] - [0x65b38, .rodata, ov_SC04_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65b54, data, tail9] + - [0x65b54, data, tail10] - [0x65b58, .rodata, ov_SC04_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65b74, data, tail10] + - [0x65b74, data, tail11] - [0x65b98, .rodata, ov_SC04_010_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65bb4, data, tail11] + - [0x65bb4, data, tail12] - [0x65bcc, .rodata, ov_SC04_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65bec, data, tail12] + - [0x65bec, data, tail13] - [0x65c6c, .rodata, ov_SC04_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65c80, data, tail13] + - [0x65c80, data, tail14] - [0x65e28, .rodata, ov_SC04_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fa0, data, tail14] + - [0x65fa0, data, tail15] - [0x66030, .rodata, ov_SC04_010_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x660bc, data, tail15] + - [0x660bc, data, tail16] - [0x660d4, .rodata, ov_SC04_010_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x660f4, data, tail16] + - [0x660f4, data, tail17] - [0x675EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x675EF] # 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_011.yaml b/config/splat.ov_SC04_011.yaml index 7ad64377a..dfe74af20 100644 --- a/config/splat.ov_SC04_011.yaml +++ b/config/splat.ov_SC04_011.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_011_jr_801380E0] - [0x171f8, c, ov_SC04_011_jr_8013F350] - [0x17e80, c, ov_SC04_011_jr_8013FFD8] + - [0x184b0, c, ov_SC04_011_jr_80140608] - [0x1CA44, c, ov_SC04_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_011_after] - [0x2c2f4, c, ov_SC04_011_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xc4e34, data, tail4] - [0xc4e38, .rodata, ov_SC04_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc4e6c, data, tail5] + - [0xc4ea8, .rodata, ov_SC04_011_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc4ebc, data, tail6] - [0xc4ed4, .rodata, ov_SC04_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4f40, data, tail6] + - [0xc4f40, data, tail7] - [0xc4fb0, .rodata, ov_SC04_011_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc4ff4, .rodata, ov_SC04_011_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc503c, data, tail7] + - [0xc503c, data, tail8] - [0xc509c, .rodata, ov_SC04_011_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc50d0, data, tail8] + - [0xc50d0, data, tail9] - [0xc50d4, .rodata, ov_SC04_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc50f0, data, tail9] + - [0xc50f0, data, tail10] - [0xc50f4, .rodata, ov_SC04_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5110, data, tail10] + - [0xc5110, data, tail11] - [0xc5134, .rodata, ov_SC04_011_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5150, data, tail11] + - [0xc5150, data, tail12] - [0xc5168, .rodata, ov_SC04_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5188, data, tail12] + - [0xc5188, data, tail13] - [0xc5208, .rodata, ov_SC04_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc521c, data, tail13] + - [0xc521c, data, tail14] - [0xc53c4, .rodata, ov_SC04_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc553c, data, tail14] + - [0xc553c, data, tail15] - [0xc55cc, .rodata, ov_SC04_011_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5658, data, tail15] + - [0xc5658, data, tail16] - [0xc57a8, .rodata, ov_SC04_011_jr_8017D494] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc57c8, data, tail16] + - [0xc57c8, data, tail17] - [0xC9554, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC9557] # 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_012.yaml b/config/splat.ov_SC04_012.yaml index bfe336c0c..218e08902 100644 --- a/config/splat.ov_SC04_012.yaml +++ b/config/splat.ov_SC04_012.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_012_jr_801380E0] - [0x171f8, c, ov_SC04_012_jr_8013F350] - [0x17e80, c, ov_SC04_012_jr_8013FFD8] + - [0x184b0, c, ov_SC04_012_jr_80140608] - [0x1CA44, c, ov_SC04_012_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_012_after] - [0x2c2f4, c, ov_SC04_012_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x67f78, data, tail4] - [0x67f7c, .rodata, ov_SC04_012_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x67fb0, data, tail5] + - [0x67fec, .rodata, ov_SC04_012_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68000, data, tail6] - [0x68018, .rodata, ov_SC04_012_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68084, data, tail6] + - [0x68084, data, tail7] - [0x680f4, .rodata, ov_SC04_012_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68138, .rodata, ov_SC04_012_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68180, data, tail7] + - [0x68180, data, tail8] - [0x681e0, .rodata, ov_SC04_012_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68214, data, tail8] + - [0x68214, data, tail9] - [0x68218, .rodata, ov_SC04_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68234, data, tail9] + - [0x68234, data, tail10] - [0x68238, .rodata, ov_SC04_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68254, data, tail10] + - [0x68254, data, tail11] - [0x68278, .rodata, ov_SC04_012_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68294, data, tail11] + - [0x68294, data, tail12] - [0x682ac, .rodata, ov_SC04_012_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x682cc, data, tail12] + - [0x682cc, data, tail13] - [0x6834c, .rodata, ov_SC04_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68360, data, tail13] + - [0x68360, data, tail14] - [0x68508, .rodata, ov_SC04_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68680, data, tail14] + - [0x68680, data, tail15] - [0x68710, .rodata, ov_SC04_012_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6879c, data, tail15] + - [0x6879c, data, tail16] - [0x6B0E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6B0E7] # 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_015.yaml b/config/splat.ov_SC04_015.yaml index 03da61b55..385c3e2a0 100644 --- a/config/splat.ov_SC04_015.yaml +++ b/config/splat.ov_SC04_015.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_015_jr_801380E0] - [0x171f8, c, ov_SC04_015_jr_8013F350] - [0x17e80, c, ov_SC04_015_jr_8013FFD8] + - [0x184b0, c, ov_SC04_015_jr_80140608] - [0x1CA44, c, ov_SC04_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_015_after] - [0x2c2f4, c, ov_SC04_015_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x9ec10, data, tail4] - [0x9ec14, .rodata, ov_SC04_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ec48, data, tail5] + - [0x9ec84, .rodata, ov_SC04_015_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ec98, data, tail6] - [0x9ecb0, .rodata, ov_SC04_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ed1c, data, tail6] + - [0x9ed1c, data, tail7] - [0x9ed8c, .rodata, ov_SC04_015_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9edd0, .rodata, ov_SC04_015_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ee18, data, tail7] + - [0x9ee18, data, tail8] - [0x9ee78, .rodata, ov_SC04_015_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eeac, data, tail8] + - [0x9eeac, data, tail9] - [0x9eeb0, .rodata, ov_SC04_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eecc, data, tail9] + - [0x9eecc, data, tail10] - [0x9eed0, .rodata, ov_SC04_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eeec, data, tail10] + - [0x9eeec, data, tail11] - [0x9ef10, .rodata, ov_SC04_015_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ef2c, data, tail11] + - [0x9ef2c, data, tail12] - [0x9ef44, .rodata, ov_SC04_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ef64, data, tail12] + - [0x9ef64, data, tail13] - [0x9efe4, .rodata, ov_SC04_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eff8, data, tail13] + - [0x9eff8, data, tail14] - [0x9f1a0, .rodata, ov_SC04_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9f318, data, tail14] + - [0x9f318, data, tail15] - [0x9f3a8, .rodata, ov_SC04_015_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9f434, data, tail15] + - [0x9f434, data, tail16] - [0xA1284, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA1287] # 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_016.yaml b/config/splat.ov_SC04_016.yaml index b7722e15f..df5acd307 100644 --- a/config/splat.ov_SC04_016.yaml +++ b/config/splat.ov_SC04_016.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_016_jr_801380E0] - [0x171f8, c, ov_SC04_016_jr_8013F350] - [0x17e80, c, ov_SC04_016_jr_8013FFD8] + - [0x184b0, c, ov_SC04_016_jr_80140608] - [0x1CA44, c, ov_SC04_016_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_016_after] - [0x2c2f4, c, ov_SC04_016_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x7cdc8, data, tail4] - [0x7cdcc, .rodata, ov_SC04_016_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7ce00, data, tail5] + - [0x7ce3c, .rodata, ov_SC04_016_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7ce50, data, tail6] - [0x7ce68, .rodata, ov_SC04_016_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7ced4, data, tail6] + - [0x7ced4, data, tail7] - [0x7cf44, .rodata, ov_SC04_016_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7cf88, .rodata, ov_SC04_016_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7cfd0, data, tail7] + - [0x7cfd0, data, tail8] - [0x7d030, .rodata, ov_SC04_016_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d064, data, tail8] + - [0x7d064, data, tail9] - [0x7d068, .rodata, ov_SC04_016_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d084, data, tail9] + - [0x7d084, data, tail10] - [0x7d088, .rodata, ov_SC04_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d0a4, data, tail10] + - [0x7d0a4, data, tail11] - [0x7d0c8, .rodata, ov_SC04_016_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d0e4, data, tail11] + - [0x7d0e4, data, tail12] - [0x7d0fc, .rodata, ov_SC04_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d11c, data, tail12] + - [0x7d11c, data, tail13] - [0x7d19c, .rodata, ov_SC04_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d1b0, data, tail13] + - [0x7d1b0, data, tail14] - [0x7d358, .rodata, ov_SC04_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d4d0, data, tail14] + - [0x7d4d0, data, tail15] - [0x7d560, .rodata, ov_SC04_016_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d5ec, data, tail15] + - [0x7d5ec, data, tail16] - [0x7d604, .rodata, ov_SC04_016_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d624, data, tail16] + - [0x7d624, data, tail17] - [0x84184, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x84187] # 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_018.yaml b/config/splat.ov_SC04_018.yaml index 74fda224a..3af18a798 100644 --- a/config/splat.ov_SC04_018.yaml +++ b/config/splat.ov_SC04_018.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_018_jr_801380E0] - [0x171f8, c, ov_SC04_018_jr_8013F350] - [0x17e80, c, ov_SC04_018_jr_8013FFD8] + - [0x184b0, c, ov_SC04_018_jr_80140608] - [0x1CA44, c, ov_SC04_018_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_018_after] - [0x2c2f4, c, ov_SC04_018_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xbcbe0, data, tail4] - [0xbcbe4, .rodata, ov_SC04_018_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcc18, data, tail5] + - [0xbcc54, .rodata, ov_SC04_018_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbcc68, data, tail6] - [0xbcc80, .rodata, ov_SC04_018_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbccec, data, tail6] + - [0xbccec, data, tail7] - [0xbcd5c, .rodata, ov_SC04_018_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcda0, .rodata, ov_SC04_018_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcde8, data, tail7] + - [0xbcde8, data, tail8] - [0xbce48, .rodata, ov_SC04_018_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbce7c, data, tail8] + - [0xbce7c, data, tail9] - [0xbce80, .rodata, ov_SC04_018_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbce9c, data, tail9] + - [0xbce9c, data, tail10] - [0xbcea0, .rodata, ov_SC04_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcebc, data, tail10] + - [0xbcebc, data, tail11] - [0xbcee0, .rodata, ov_SC04_018_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcefc, data, tail11] + - [0xbcefc, data, tail12] - [0xbcf14, .rodata, ov_SC04_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcf34, data, tail12] + - [0xbcf34, data, tail13] - [0xbcfb4, .rodata, ov_SC04_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail13] + - [0xbcfc8, data, tail14] - [0xbd170, .rodata, ov_SC04_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail14] + - [0xbd2e8, data, tail15] - [0xbd378, .rodata, ov_SC04_018_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd404, data, tail15] + - [0xbd404, data, tail16] - [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_SC04_019.yaml b/config/splat.ov_SC04_019.yaml index fd8066666..907a57e1e 100644 --- a/config/splat.ov_SC04_019.yaml +++ b/config/splat.ov_SC04_019.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_019_jr_801380E0] - [0x171f8, c, ov_SC04_019_jr_8013F350] - [0x17e80, c, ov_SC04_019_jr_8013FFD8] + - [0x184b0, c, ov_SC04_019_jr_80140608] - [0x1CA44, c, ov_SC04_019_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_019_after] - [0x2c2f4, c, ov_SC04_019_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xbcbe0, data, tail4] - [0xbcbe4, .rodata, ov_SC04_019_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcc18, data, tail5] + - [0xbcc54, .rodata, ov_SC04_019_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbcc68, data, tail6] - [0xbcc80, .rodata, ov_SC04_019_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbccec, data, tail6] + - [0xbccec, data, tail7] - [0xbcd5c, .rodata, ov_SC04_019_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcda0, .rodata, ov_SC04_019_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcde8, data, tail7] + - [0xbcde8, data, tail8] - [0xbce48, .rodata, ov_SC04_019_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbce7c, data, tail8] + - [0xbce7c, data, tail9] - [0xbce80, .rodata, ov_SC04_019_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbce9c, data, tail9] + - [0xbce9c, data, tail10] - [0xbcea0, .rodata, ov_SC04_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcebc, data, tail10] + - [0xbcebc, data, tail11] - [0xbcee0, .rodata, ov_SC04_019_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcefc, data, tail11] + - [0xbcefc, data, tail12] - [0xbcf14, .rodata, ov_SC04_019_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcf34, data, tail12] + - [0xbcf34, data, tail13] - [0xbcfb4, .rodata, ov_SC04_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail13] + - [0xbcfc8, data, tail14] - [0xbd170, .rodata, ov_SC04_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail14] + - [0xbd2e8, data, tail15] - [0xbd378, .rodata, ov_SC04_019_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd404, data, tail15] + - [0xbd404, data, tail16] - [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_SC04_020.yaml b/config/splat.ov_SC04_020.yaml index a8a51c82a..901ac2597 100644 --- a/config/splat.ov_SC04_020.yaml +++ b/config/splat.ov_SC04_020.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_020_jr_801380E0] - [0x171f8, c, ov_SC04_020_jr_8013F350] - [0x17e80, c, ov_SC04_020_jr_8013FFD8] + - [0x184b0, c, ov_SC04_020_jr_80140608] - [0x1CA44, c, ov_SC04_020_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_020_after] - [0x2c2f4, c, ov_SC04_020_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x92608, data, tail4] - [0x9260c, .rodata, ov_SC04_020_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x92640, data, tail5] + - [0x9267c, .rodata, ov_SC04_020_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x92690, data, tail6] - [0x926a8, .rodata, ov_SC04_020_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92714, data, tail6] + - [0x92714, data, tail7] - [0x92784, .rodata, ov_SC04_020_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x927c8, .rodata, ov_SC04_020_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92810, data, tail7] + - [0x92810, data, tail8] - [0x92870, .rodata, ov_SC04_020_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x928a4, data, tail8] + - [0x928a4, data, tail9] - [0x928a8, .rodata, ov_SC04_020_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x928c4, data, tail9] + - [0x928c4, data, tail10] - [0x928c8, .rodata, ov_SC04_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x928e4, data, tail10] + - [0x928e4, data, tail11] - [0x92908, .rodata, ov_SC04_020_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92924, data, tail11] + - [0x92924, data, tail12] - [0x9293c, .rodata, ov_SC04_020_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9295c, data, tail12] + - [0x9295c, data, tail13] - [0x929dc, .rodata, ov_SC04_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x929f0, data, tail13] + - [0x929f0, data, tail14] - [0x92b98, .rodata, ov_SC04_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92d10, data, tail14] + - [0x92d10, data, tail15] - [0x92da0, .rodata, ov_SC04_020_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92e2c, data, tail15] + - [0x92e2c, data, tail16] - [0x92e44, .rodata, ov_SC04_020_jr_8017D604] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92e64, data, tail16] + - [0x92e64, data, tail17] - [0x94654, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x94657] # 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_021.yaml b/config/splat.ov_SC04_021.yaml index ca9ca8c50..52ae87cea 100644 --- a/config/splat.ov_SC04_021.yaml +++ b/config/splat.ov_SC04_021.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC04_021_jr_801380E0] - [0x171f8, c, ov_SC04_021_jr_8013F350] - [0x17e80, c, ov_SC04_021_jr_8013FFD8] + - [0x184b0, c, ov_SC04_021_jr_80140608] - [0x1CA44, c, ov_SC04_021_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_021_after] - [0x2c2f4, c, ov_SC04_021_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x65ca4, data, tail4] - [0x65ca8, .rodata, ov_SC04_021_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65cdc, data, tail5] + - [0x65d18, .rodata, ov_SC04_021_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65d2c, data, tail6] - [0x65d44, .rodata, ov_SC04_021_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65db0, data, tail6] + - [0x65db0, data, tail7] - [0x65e20, .rodata, ov_SC04_021_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65e64, .rodata, ov_SC04_021_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65eac, data, tail7] + - [0x65eac, data, tail8] - [0x65f0c, .rodata, ov_SC04_021_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f40, data, tail8] + - [0x65f40, data, tail9] - [0x65f44, .rodata, ov_SC04_021_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f60, data, tail9] + - [0x65f60, data, tail10] - [0x65f64, .rodata, ov_SC04_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail10] + - [0x65f80, data, tail11] - [0x65fa4, .rodata, ov_SC04_021_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fc0, data, tail11] + - [0x65fc0, data, tail12] - [0x65fd8, .rodata, ov_SC04_021_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65ff8, data, tail12] + - [0x65ff8, data, tail13] - [0x66078, .rodata, ov_SC04_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail13] + - [0x6608c, data, tail14] - [0x66234, .rodata, ov_SC04_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail14] + - [0x663ac, data, tail15] - [0x6643c, .rodata, ov_SC04_021_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x664c8, data, tail15] + - [0x664c8, data, tail16] - [0x66500, .rodata, ov_SC04_021_jr_8017D5C0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66520, data, tail16] + - [0x66520, data, tail17] - [0x679D4, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x679D5] # 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_000.yaml b/config/splat.ov_SC05_000.yaml index 7faec7782..dab402696 100644 --- a/config/splat.ov_SC05_000.yaml +++ b/config/splat.ov_SC05_000.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_000_jr_801380E0] - [0x171f8, c, ov_SC05_000_jr_8013F350] - [0x17e80, c, ov_SC05_000_jr_8013FFD8] + - [0x184b0, c, ov_SC05_000_jr_80140608] - [0x1CA44, c, ov_SC05_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_000_after] - [0x2c2f4, c, ov_SC05_000_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x70df4, data, tail4] - [0x70df8, .rodata, ov_SC05_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70e2c, data, tail5] + - [0x70e68, .rodata, ov_SC05_000_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70e7c, data, tail6] - [0x70e94, .rodata, ov_SC05_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70f00, data, tail6] + - [0x70f00, data, tail7] - [0x70f70, .rodata, ov_SC05_000_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70fb4, .rodata, ov_SC05_000_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70ffc, data, tail7] + - [0x70ffc, data, tail8] - [0x7105c, .rodata, ov_SC05_000_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71090, data, tail8] + - [0x71090, data, tail9] - [0x71094, .rodata, ov_SC05_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710b0, data, tail9] + - [0x710b0, data, tail10] - [0x710b4, .rodata, ov_SC05_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710d0, data, tail10] + - [0x710d0, data, tail11] - [0x710f4, .rodata, ov_SC05_000_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71110, data, tail11] + - [0x71110, data, tail12] - [0x71128, .rodata, ov_SC05_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71148, data, tail12] + - [0x71148, data, tail13] - [0x711c8, .rodata, ov_SC05_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711dc, data, tail13] + - [0x711dc, data, tail14] - [0x71384, .rodata, ov_SC05_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x714fc, data, tail14] + - [0x714fc, data, tail15] - [0x7158c, .rodata, ov_SC05_000_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71618, data, tail15] + - [0x71618, data, tail16] - [0x71630, .rodata, ov_SC05_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71650, data, tail16] + - [0x71650, data, tail17] - [0x72AFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x72AFF] # 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_001.yaml b/config/splat.ov_SC05_001.yaml index 458342897..c00eca7a7 100644 --- a/config/splat.ov_SC05_001.yaml +++ b/config/splat.ov_SC05_001.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_001_jr_801380E0] - [0x171f8, c, ov_SC05_001_jr_8013F350] - [0x17e80, c, ov_SC05_001_jr_8013FFD8] + - [0x184b0, c, ov_SC05_001_jr_80140608] - [0x1CA44, c, ov_SC05_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_001_after] - [0x2c2f4, c, ov_SC05_001_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8bda8, data, tail4] - [0x8bdac, .rodata, ov_SC05_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8bde0, data, tail5] + - [0x8be1c, .rodata, ov_SC05_001_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8be30, data, tail6] - [0x8be48, .rodata, ov_SC05_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8beb4, data, tail6] + - [0x8beb4, data, tail7] - [0x8bf24, .rodata, ov_SC05_001_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8bf68, .rodata, ov_SC05_001_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8bfb0, data, tail7] + - [0x8bfb0, data, tail8] - [0x8c010, .rodata, ov_SC05_001_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c044, data, tail8] + - [0x8c044, data, tail9] - [0x8c048, .rodata, ov_SC05_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c064, data, tail9] + - [0x8c064, data, tail10] - [0x8c068, .rodata, ov_SC05_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c084, data, tail10] + - [0x8c084, data, tail11] - [0x8c0a8, .rodata, ov_SC05_001_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c0c4, data, tail11] + - [0x8c0c4, data, tail12] - [0x8c0dc, .rodata, ov_SC05_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c0fc, data, tail12] + - [0x8c0fc, data, tail13] - [0x8c17c, .rodata, ov_SC05_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c190, data, tail13] + - [0x8c190, data, tail14] - [0x8c338, .rodata, ov_SC05_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c4b0, data, tail14] + - [0x8c4b0, data, tail15] - [0x8c540, .rodata, ov_SC05_001_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c5cc, data, tail15] + - [0x8c5cc, data, tail16] - [0x8c5e4, .rodata, ov_SC05_001_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c604, data, tail16] + - [0x8c604, data, tail17] - [0x8DEAC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8DEAF] # 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_002.yaml b/config/splat.ov_SC05_002.yaml index a0b27b884..25ddb158e 100644 --- a/config/splat.ov_SC05_002.yaml +++ b/config/splat.ov_SC05_002.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_002_jr_801380E0] - [0x171f8, c, ov_SC05_002_jr_8013F350] - [0x17e80, c, ov_SC05_002_jr_8013FFD8] + - [0x184b0, c, ov_SC05_002_jr_80140608] - [0x1CA44, c, ov_SC05_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_002_after] - [0x2c2f4, c, ov_SC05_002_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x76154, data, tail4] - [0x76158, .rodata, ov_SC05_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7618c, data, tail5] + - [0x761c8, .rodata, ov_SC05_002_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x761dc, data, tail6] - [0x761f4, .rodata, ov_SC05_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76260, data, tail6] + - [0x76260, data, tail7] - [0x762d0, .rodata, ov_SC05_002_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76314, .rodata, ov_SC05_002_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7635c, data, tail7] + - [0x7635c, data, tail8] - [0x763bc, .rodata, ov_SC05_002_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x763f0, data, tail8] + - [0x763f0, data, tail9] - [0x763f4, .rodata, ov_SC05_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76410, data, tail9] + - [0x76410, data, tail10] - [0x76414, .rodata, ov_SC05_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76430, data, tail10] + - [0x76430, data, tail11] - [0x76454, .rodata, ov_SC05_002_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76470, data, tail11] + - [0x76470, data, tail12] - [0x76488, .rodata, ov_SC05_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764a8, data, tail12] + - [0x764a8, data, tail13] - [0x76528, .rodata, ov_SC05_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7653c, data, tail13] + - [0x7653c, data, tail14] - [0x766e4, .rodata, ov_SC05_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7685c, data, tail14] + - [0x7685c, data, tail15] - [0x768ec, .rodata, ov_SC05_002_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76978, data, tail15] + - [0x76978, data, tail16] - [0x76990, .rodata, ov_SC05_002_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x769b0, data, tail16] + - [0x769b0, data, tail17] - [0x77E64, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x77E67] # 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_003.yaml b/config/splat.ov_SC05_003.yaml index 27c5be5cf..2f7278bd9 100644 --- a/config/splat.ov_SC05_003.yaml +++ b/config/splat.ov_SC05_003.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_003_jr_801380E0] - [0x171f8, c, ov_SC05_003_jr_8013F350] - [0x17e80, c, ov_SC05_003_jr_8013FFD8] + - [0x184b0, c, ov_SC05_003_jr_80140608] - [0x1CA44, c, ov_SC05_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_003_after] - [0x2c2f4, c, ov_SC05_003_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x82c50, data, tail4] - [0x82c54, .rodata, ov_SC05_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82c88, data, tail5] + - [0x82cc4, .rodata, ov_SC05_003_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x82cd8, data, tail6] - [0x82cf0, .rodata, ov_SC05_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82d5c, data, tail6] + - [0x82d5c, data, tail7] - [0x82dcc, .rodata, ov_SC05_003_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82e10, .rodata, ov_SC05_003_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82e58, data, tail7] + - [0x82e58, data, tail8] - [0x82eb8, .rodata, ov_SC05_003_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82eec, data, tail8] + - [0x82eec, data, tail9] - [0x82ef0, .rodata, ov_SC05_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82f0c, data, tail9] + - [0x82f0c, data, tail10] - [0x82f10, .rodata, ov_SC05_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82f2c, data, tail10] + - [0x82f2c, data, tail11] - [0x82f50, .rodata, ov_SC05_003_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82f6c, data, tail11] + - [0x82f6c, data, tail12] - [0x82f84, .rodata, ov_SC05_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82fa4, data, tail12] + - [0x82fa4, data, tail13] - [0x83024, .rodata, ov_SC05_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83038, data, tail13] + - [0x83038, data, tail14] - [0x831e0, .rodata, ov_SC05_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83358, data, tail14] + - [0x83358, data, tail15] - [0x833e8, .rodata, ov_SC05_003_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83474, data, tail15] + - [0x83474, data, tail16] - [0x8348c, .rodata, ov_SC05_003_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x834ac, data, tail16] + - [0x834ac, data, tail17] - [0x84974, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x84977] # 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_004.yaml b/config/splat.ov_SC05_004.yaml index 6a0dc18b4..3625cc998 100644 --- a/config/splat.ov_SC05_004.yaml +++ b/config/splat.ov_SC05_004.yaml @@ -97,6 +97,7 @@ segments: - [0x2b88, c, ov_SC05_004_jr_8012ACE0] - [0xff88, c, ov_SC05_004_jr_801380E0] - [0x171f8, c, ov_SC05_004_jr_8013F350] + - [0x184b0, c, ov_SC05_004_jr_80140608] - [0x1CA44, c, ov_SC05_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_004_after] - [0x2c2f4, c, ov_SC05_004_jr_8015444C] @@ -118,29 +119,31 @@ segments: - [0x74c04, data, tail3] - [0x75210, .rodata, ov_SC05_004_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75244, data, tail4] + - [0x752b8, .rodata, ov_SC05_004_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x752cc, data, tail5] - [0x752e4, .rodata, ov_SC05_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75350, data, tail5] + - [0x75350, data, tail6] - [0x753c0, .rodata, ov_SC05_004_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75404, .rodata, ov_SC05_004_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7544c, data, tail6] + - [0x7544c, data, tail7] - [0x754ac, .rodata, ov_SC05_004_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x754e0, data, tail7] + - [0x754e0, data, tail8] - [0x754e4, .rodata, ov_SC05_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75500, data, tail8] + - [0x75500, data, tail9] - [0x75504, .rodata, ov_SC05_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75520, data, tail9] + - [0x75520, data, tail10] - [0x75544, .rodata, ov_SC05_004_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75560, data, tail10] + - [0x75560, data, tail11] - [0x75578, .rodata, ov_SC05_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75598, data, tail11] + - [0x75598, data, tail12] - [0x75618, .rodata, ov_SC05_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7562c, data, tail12] + - [0x7562c, data, tail13] - [0x757d4, .rodata, ov_SC05_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7594c, data, tail13] + - [0x7594c, data, tail14] - [0x759dc, .rodata, ov_SC05_004_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75a68, data, tail14] + - [0x75a68, data, tail15] - [0x75a80, .rodata, ov_SC05_004_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75aa0, data, tail15] + - [0x75aa0, data, tail16] - [0x771CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x771CF] # 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_005.yaml b/config/splat.ov_SC05_005.yaml index 7aadd7452..819c135f6 100644 --- a/config/splat.ov_SC05_005.yaml +++ b/config/splat.ov_SC05_005.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_005_jr_801380E0] - [0x171f8, c, ov_SC05_005_jr_8013F350] - [0x17e80, c, ov_SC05_005_jr_8013FFD8] + - [0x184b0, c, ov_SC05_005_jr_80140608] - [0x1CA44, c, ov_SC05_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_005_after] - [0x2c2f4, c, ov_SC05_005_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x87f2c, data, tail4] - [0x87f30, .rodata, ov_SC05_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87f64, data, tail5] + - [0x87fa0, .rodata, ov_SC05_005_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x87fb4, data, tail6] - [0x87fcc, .rodata, ov_SC05_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88038, data, tail6] + - [0x88038, data, tail7] - [0x880a8, .rodata, ov_SC05_005_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x880ec, .rodata, ov_SC05_005_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88134, data, tail7] + - [0x88134, data, tail8] - [0x88194, .rodata, ov_SC05_005_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x881c8, data, tail8] + - [0x881c8, data, tail9] - [0x881cc, .rodata, ov_SC05_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x881e8, data, tail9] + - [0x881e8, data, tail10] - [0x881ec, .rodata, ov_SC05_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88208, data, tail10] + - [0x88208, data, tail11] - [0x8822c, .rodata, ov_SC05_005_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88248, data, tail11] + - [0x88248, data, tail12] - [0x88260, .rodata, ov_SC05_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88280, data, tail12] + - [0x88280, data, tail13] - [0x88300, .rodata, ov_SC05_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88314, data, tail13] + - [0x88314, data, tail14] - [0x884bc, .rodata, ov_SC05_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88634, data, tail14] + - [0x88634, data, tail15] - [0x886c4, .rodata, ov_SC05_005_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88750, data, tail15] + - [0x88750, data, tail16] - [0x88768, .rodata, ov_SC05_005_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88788, data, tail16] + - [0x88788, data, tail17] - [0x89ED4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x89ED7] # 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_006.yaml b/config/splat.ov_SC05_006.yaml index db7612312..8a4ee1957 100644 --- a/config/splat.ov_SC05_006.yaml +++ b/config/splat.ov_SC05_006.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_006_jr_801380E0] - [0x171f8, c, ov_SC05_006_jr_8013F350] - [0x17e80, c, ov_SC05_006_jr_8013FFD8] + - [0x184b0, c, ov_SC05_006_jr_80140608] - [0x1CA44, c, ov_SC05_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_006_after] - [0x2c2f4, c, ov_SC05_006_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x6607c, data, tail4] - [0x66080, .rodata, ov_SC05_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x660b4, data, tail5] + - [0x660f0, .rodata, ov_SC05_006_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66104, data, tail6] - [0x6611c, .rodata, ov_SC05_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66188, data, tail6] + - [0x66188, data, tail7] - [0x661f8, .rodata, ov_SC05_006_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6623c, .rodata, ov_SC05_006_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66284, data, tail7] + - [0x66284, data, tail8] - [0x662e4, .rodata, ov_SC05_006_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66318, data, tail8] + - [0x66318, data, tail9] - [0x6631c, .rodata, ov_SC05_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66338, data, tail9] + - [0x66338, data, tail10] - [0x6633c, .rodata, ov_SC05_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66358, data, tail10] + - [0x66358, data, tail11] - [0x6637c, .rodata, ov_SC05_006_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66398, data, tail11] + - [0x66398, data, tail12] - [0x663b0, .rodata, ov_SC05_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663d0, data, tail12] + - [0x663d0, data, tail13] - [0x66450, .rodata, ov_SC05_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66464, data, tail13] + - [0x66464, data, tail14] - [0x6660c, .rodata, ov_SC05_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66784, data, tail14] + - [0x66784, data, tail15] - [0x66814, .rodata, ov_SC05_006_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x668a0, data, tail15] + - [0x668a0, data, tail16] - [0x668b8, .rodata, ov_SC05_006_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x668d8, data, tail16] + - [0x668d8, data, tail17] - [0x68004, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x68007] # 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_007.yaml b/config/splat.ov_SC05_007.yaml index 511409a03..646344e3e 100644 --- a/config/splat.ov_SC05_007.yaml +++ b/config/splat.ov_SC05_007.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_007_jr_801380E0] - [0x171f8, c, ov_SC05_007_jr_8013F350] - [0x17e80, c, ov_SC05_007_jr_8013FFD8] + - [0x184b0, c, ov_SC05_007_jr_80140608] - [0x1CA44, c, ov_SC05_007_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_007_after] - [0x2c2f4, c, ov_SC05_007_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x73054, data, tail4] - [0x73058, .rodata, ov_SC05_007_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7308c, data, tail5] + - [0x730c8, .rodata, ov_SC05_007_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x730dc, data, tail6] - [0x730f4, .rodata, ov_SC05_007_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73160, data, tail6] + - [0x73160, data, tail7] - [0x731d0, .rodata, ov_SC05_007_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73214, .rodata, ov_SC05_007_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7325c, data, tail7] + - [0x7325c, data, tail8] - [0x732bc, .rodata, ov_SC05_007_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x732f0, data, tail8] + - [0x732f0, data, tail9] - [0x732f4, .rodata, ov_SC05_007_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73310, data, tail9] + - [0x73310, data, tail10] - [0x73314, .rodata, ov_SC05_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73330, data, tail10] + - [0x73330, data, tail11] - [0x73354, .rodata, ov_SC05_007_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73370, data, tail11] + - [0x73370, data, tail12] - [0x73388, .rodata, ov_SC05_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x733a8, data, tail12] + - [0x733a8, data, tail13] - [0x73428, .rodata, ov_SC05_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7343c, data, tail13] + - [0x7343c, data, tail14] - [0x735e4, .rodata, ov_SC05_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7375c, data, tail14] + - [0x7375c, data, tail15] - [0x737ec, .rodata, ov_SC05_007_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73878, data, tail15] + - [0x73878, data, tail16] - [0x73890, .rodata, ov_SC05_007_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x738b0, data, tail16] + - [0x738b0, data, tail17] - [0x74DA4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x74DA7] # 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_008.yaml b/config/splat.ov_SC05_008.yaml index a99f638a9..b49fb0d83 100644 --- a/config/splat.ov_SC05_008.yaml +++ b/config/splat.ov_SC05_008.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_008_jr_801380E0] - [0x171f8, c, ov_SC05_008_jr_8013F350] - [0x17e80, c, ov_SC05_008_jr_8013FFD8] + - [0x184b0, c, ov_SC05_008_jr_80140608] - [0x1CA44, c, ov_SC05_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_008_after] - [0x2c2f4, c, ov_SC05_008_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x77388, data, tail4] - [0x7738c, .rodata, ov_SC05_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x773c0, data, tail5] + - [0x773fc, .rodata, ov_SC05_008_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77410, data, tail6] - [0x77428, .rodata, ov_SC05_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77494, data, tail6] + - [0x77494, data, tail7] - [0x77504, .rodata, ov_SC05_008_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77548, .rodata, ov_SC05_008_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77590, data, tail7] + - [0x77590, data, tail8] - [0x775f0, .rodata, ov_SC05_008_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77624, data, tail8] + - [0x77624, data, tail9] - [0x77628, .rodata, ov_SC05_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77644, data, tail9] + - [0x77644, data, tail10] - [0x77648, .rodata, ov_SC05_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77664, data, tail10] + - [0x77664, data, tail11] - [0x77688, .rodata, ov_SC05_008_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x776a4, data, tail11] + - [0x776a4, data, tail12] - [0x776bc, .rodata, ov_SC05_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x776dc, data, tail12] + - [0x776dc, data, tail13] - [0x7775c, .rodata, ov_SC05_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77770, data, tail13] + - [0x77770, data, tail14] - [0x77918, .rodata, ov_SC05_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a90, data, tail14] + - [0x77a90, data, tail15] - [0x77b20, .rodata, ov_SC05_008_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77bac, data, tail15] + - [0x77bac, data, tail16] - [0x79190, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x79193] # 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_009.yaml b/config/splat.ov_SC05_009.yaml index d89d6dc7d..ce65c9195 100644 --- a/config/splat.ov_SC05_009.yaml +++ b/config/splat.ov_SC05_009.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_009_jr_801380E0] - [0x171f8, c, ov_SC05_009_jr_8013F350] - [0x17e80, c, ov_SC05_009_jr_8013FFD8] + - [0x184b0, c, ov_SC05_009_jr_80140608] - [0x1CA44, c, ov_SC05_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_009_after] - [0x2c2f4, c, ov_SC05_009_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x6cd9c, data, tail4] - [0x6cda0, .rodata, ov_SC05_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6cdd4, data, tail5] + - [0x6ce10, .rodata, ov_SC05_009_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6ce24, data, tail6] - [0x6ce3c, .rodata, ov_SC05_009_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cea8, data, tail6] + - [0x6cea8, data, tail7] - [0x6cf18, .rodata, ov_SC05_009_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6cf5c, .rodata, ov_SC05_009_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cfa4, data, tail7] + - [0x6cfa4, data, tail8] - [0x6d004, .rodata, ov_SC05_009_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d038, data, tail8] + - [0x6d038, data, tail9] - [0x6d05c, .rodata, ov_SC05_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d078, data, tail9] + - [0x6d078, data, tail10] - [0x6d09c, .rodata, ov_SC05_009_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d0b8, data, tail10] + - [0x6d0b8, data, tail11] - [0x6d0d0, .rodata, ov_SC05_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d0f0, data, tail11] + - [0x6d0f0, data, tail12] - [0x6d170, .rodata, ov_SC05_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d184, data, tail12] + - [0x6d184, data, tail13] - [0x6d32c, .rodata, ov_SC05_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d4a4, data, tail13] + - [0x6d4a4, data, tail14] - [0x6d534, .rodata, ov_SC05_009_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d5c0, data, tail14] + - [0x6d5c0, data, tail15] - [0x6d5d8, .rodata, ov_SC05_009_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d5f8, data, tail15] + - [0x6d5f8, data, tail16] - [0x6EAEC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6EAEF] # 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_010.yaml b/config/splat.ov_SC05_010.yaml index c2bcdf759..bdf5c8a9c 100644 --- a/config/splat.ov_SC05_010.yaml +++ b/config/splat.ov_SC05_010.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_010_jr_801380E0] - [0x171f8, c, ov_SC05_010_jr_8013F350] - [0x17e80, c, ov_SC05_010_jr_8013FFD8] + - [0x184b0, c, ov_SC05_010_jr_80140608] - [0x1CA44, c, ov_SC05_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_010_after] - [0x2c2f4, c, ov_SC05_010_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x9cfd0, data, tail4] - [0x9cfd4, .rodata, ov_SC05_010_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d008, data, tail5] + - [0x9d044, .rodata, ov_SC05_010_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d058, data, tail6] - [0x9d070, .rodata, ov_SC05_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d0dc, data, tail6] + - [0x9d0dc, data, tail7] - [0x9d14c, .rodata, ov_SC05_010_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d190, .rodata, ov_SC05_010_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d1d8, data, tail7] + - [0x9d1d8, data, tail8] - [0x9d238, .rodata, ov_SC05_010_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d26c, data, tail8] + - [0x9d26c, data, tail9] - [0x9d270, .rodata, ov_SC05_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d28c, data, tail9] + - [0x9d28c, data, tail10] - [0x9d290, .rodata, ov_SC05_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d2ac, data, tail10] + - [0x9d2ac, data, tail11] - [0x9d2d0, .rodata, ov_SC05_010_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d2ec, data, tail11] + - [0x9d2ec, data, tail12] - [0x9d304, .rodata, ov_SC05_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d324, data, tail12] + - [0x9d324, data, tail13] - [0x9d3a4, .rodata, ov_SC05_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d3b8, data, tail13] + - [0x9d3b8, data, tail14] - [0x9d560, .rodata, ov_SC05_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d6d8, data, tail14] + - [0x9d6d8, data, tail15] - [0x9d768, .rodata, ov_SC05_010_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d7f4, data, tail15] + - [0x9d7f4, data, tail16] - [0x9d944, .rodata, ov_SC05_010_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d964, data, tail16] + - [0x9d964, data, tail17] - [0x9FED4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FED7] # 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_011.yaml b/config/splat.ov_SC05_011.yaml index d5d24b57f..734993a76 100644 --- a/config/splat.ov_SC05_011.yaml +++ b/config/splat.ov_SC05_011.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_011_jr_801380E0] - [0x171f8, c, ov_SC05_011_jr_8013F350] - [0x17e80, c, ov_SC05_011_jr_8013FFD8] + - [0x184b0, c, ov_SC05_011_jr_80140608] - [0x1CA44, c, ov_SC05_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_011_after] - [0x2c2f4, c, ov_SC05_011_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x73334, data, tail4] - [0x73338, .rodata, ov_SC05_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7336c, data, tail5] + - [0x733a8, .rodata, ov_SC05_011_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x733bc, data, tail6] - [0x733d4, .rodata, ov_SC05_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73440, data, tail6] + - [0x73440, data, tail7] - [0x734b0, .rodata, ov_SC05_011_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x734f4, .rodata, ov_SC05_011_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7353c, data, tail7] + - [0x7353c, data, tail8] - [0x7359c, .rodata, ov_SC05_011_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x735d0, data, tail8] + - [0x735d0, data, tail9] - [0x735d4, .rodata, ov_SC05_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x735f0, data, tail9] + - [0x735f0, data, tail10] - [0x735f4, .rodata, ov_SC05_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73610, data, tail10] + - [0x73610, data, tail11] - [0x73634, .rodata, ov_SC05_011_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73650, data, tail11] + - [0x73650, data, tail12] - [0x73668, .rodata, ov_SC05_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73688, data, tail12] + - [0x73688, data, tail13] - [0x73708, .rodata, ov_SC05_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7371c, data, tail13] + - [0x7371c, data, tail14] - [0x738c4, .rodata, ov_SC05_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73a3c, data, tail14] + - [0x73a3c, data, tail15] - [0x73acc, .rodata, ov_SC05_011_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73b58, data, tail15] + - [0x73b58, data, tail16] - [0x73b70, .rodata, ov_SC05_011_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73b90, data, tail16] + - [0x73b90, data, tail17] - [0x75084, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x75087] # 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 cbc0a6c98..7bb1ba2cc 100644 --- a/config/splat.ov_SC05_017.yaml +++ b/config/splat.ov_SC05_017.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_017_jr_801380E0] - [0x171f8, c, ov_SC05_017_jr_8013F350] - [0x17e80, c, ov_SC05_017_jr_8013FFD8] + - [0x184b0, c, ov_SC05_017_jr_80140608] - [0x1CA44, c, ov_SC05_017_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_017_after] - [0x2c2f4, c, ov_SC05_017_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xc2a1c, data, tail4] - [0xc2a20, .rodata, ov_SC05_017_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc2a54, data, tail5] + - [0xc2a90, .rodata, ov_SC05_017_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc2aa4, data, tail6] - [0xc2abc, .rodata, ov_SC05_017_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2b28, data, tail6] + - [0xc2b28, data, tail7] - [0xc2b98, .rodata, ov_SC05_017_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc2bdc, .rodata, ov_SC05_017_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2c24, data, tail7] + - [0xc2c24, data, tail8] - [0xc2c84, .rodata, ov_SC05_017_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2cb8, data, tail8] + - [0xc2cb8, data, tail9] - [0xc2cbc, .rodata, ov_SC05_017_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2cd8, data, tail9] + - [0xc2cd8, data, tail10] - [0xc2cdc, .rodata, ov_SC05_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2cf8, data, tail10] + - [0xc2cf8, data, tail11] - [0xc2d1c, .rodata, ov_SC05_017_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2d38, data, tail11] + - [0xc2d38, data, tail12] - [0xc2d50, .rodata, ov_SC05_017_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2d70, data, tail12] + - [0xc2d70, data, tail13] - [0xc2df0, .rodata, ov_SC05_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2e04, data, tail13] + - [0xc2e04, data, tail14] - [0xc2fac, .rodata, ov_SC05_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3124, data, tail14] + - [0xc3124, data, tail15] - [0xc31b4, .rodata, ov_SC05_017_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3240, data, tail15] + - [0xc3240, data, tail16] - [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/config/splat.ov_SC05_018.yaml b/config/splat.ov_SC05_018.yaml index d5e0eefad..2f5ff4e31 100644 --- a/config/splat.ov_SC05_018.yaml +++ b/config/splat.ov_SC05_018.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_018_jr_801380E0] - [0x171f8, c, ov_SC05_018_jr_8013F350] - [0x17e80, c, ov_SC05_018_jr_8013FFD8] + - [0x184b0, c, ov_SC05_018_jr_80140608] - [0x1CA44, c, ov_SC05_018_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_018_after] - [0x2c2f4, c, ov_SC05_018_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xbc590, data, tail4] - [0xbc594, .rodata, ov_SC05_018_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc5c8, data, tail5] + - [0xbc604, .rodata, ov_SC05_018_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbc618, data, tail6] - [0xbc630, .rodata, ov_SC05_018_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc69c, data, tail6] + - [0xbc69c, data, tail7] - [0xbc70c, .rodata, ov_SC05_018_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc750, .rodata, ov_SC05_018_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc798, data, tail7] + - [0xbc798, data, tail8] - [0xbc7f8, .rodata, ov_SC05_018_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc82c, data, tail8] + - [0xbc82c, data, tail9] - [0xbc830, .rodata, ov_SC05_018_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc84c, data, tail9] + - [0xbc84c, data, tail10] - [0xbc850, .rodata, ov_SC05_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc86c, data, tail10] + - [0xbc86c, data, tail11] - [0xbc890, .rodata, ov_SC05_018_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc8ac, data, tail11] + - [0xbc8ac, data, tail12] - [0xbc8c4, .rodata, ov_SC05_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc8e4, data, tail12] + - [0xbc8e4, data, tail13] - [0xbc964, .rodata, ov_SC05_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc978, data, tail13] + - [0xbc978, data, tail14] - [0xbcb20, .rodata, ov_SC05_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcc98, data, tail14] + - [0xbcc98, data, tail15] - [0xbcd28, .rodata, ov_SC05_018_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcdb4, data, tail15] + - [0xbcdb4, data, tail16] - [0xbcdcc, .rodata, ov_SC05_018_jr_8017D604] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcdec, data, tail16] + - [0xbcdec, data, tail17] - [0xBE734, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBE737] # 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_019.yaml b/config/splat.ov_SC05_019.yaml index d11b21d14..506876965 100644 --- a/config/splat.ov_SC05_019.yaml +++ b/config/splat.ov_SC05_019.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC05_019_jr_801380E0] - [0x171f8, c, ov_SC05_019_jr_8013F350] - [0x17e80, c, ov_SC05_019_jr_8013FFD8] + - [0x184b0, c, ov_SC05_019_jr_80140608] - [0x1CA44, c, ov_SC05_019_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_019_after] - [0x2c2f4, c, ov_SC05_019_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x65ca4, data, tail4] - [0x65ca8, .rodata, ov_SC05_019_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65cdc, data, tail5] + - [0x65d18, .rodata, ov_SC05_019_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65d2c, data, tail6] - [0x65d44, .rodata, ov_SC05_019_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65db0, data, tail6] + - [0x65db0, data, tail7] - [0x65e20, .rodata, ov_SC05_019_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65e64, .rodata, ov_SC05_019_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65eac, data, tail7] + - [0x65eac, data, tail8] - [0x65f0c, .rodata, ov_SC05_019_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f40, data, tail8] + - [0x65f40, data, tail9] - [0x65f44, .rodata, ov_SC05_019_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f60, data, tail9] + - [0x65f60, data, tail10] - [0x65f64, .rodata, ov_SC05_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail10] + - [0x65f80, data, tail11] - [0x65fa4, .rodata, ov_SC05_019_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fc0, data, tail11] + - [0x65fc0, data, tail12] - [0x65fd8, .rodata, ov_SC05_019_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65ff8, data, tail12] + - [0x65ff8, data, tail13] - [0x66078, .rodata, ov_SC05_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail13] + - [0x6608c, data, tail14] - [0x66234, .rodata, ov_SC05_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail14] + - [0x663ac, data, tail15] - [0x6643c, .rodata, ov_SC05_019_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x664c8, data, tail15] + - [0x664c8, data, tail16] - [0x66500, .rodata, ov_SC05_019_jr_8017D5C0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66520, data, tail16] + - [0x66520, data, tail17] - [0x679D4, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x679D5] # 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_SC06_000.yaml b/config/splat.ov_SC06_000.yaml index 9d6f4f8d5..fe0b0407c 100644 --- a/config/splat.ov_SC06_000.yaml +++ b/config/splat.ov_SC06_000.yaml @@ -97,6 +97,7 @@ segments: - [0x2b88, c, ov_SC06_000_jr_8012ACE0] - [0xff88, c, ov_SC06_000_jr_801380E0] - [0x171f8, c, ov_SC06_000_jr_8013F350] + - [0x184b0, c, ov_SC06_000_jr_80140608] - [0x1CA44, c, ov_SC06_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_000_after] - [0x2c2f4, c, ov_SC06_000_jr_8015444C] @@ -117,27 +118,29 @@ segments: - [0x842dc, data, tail3] - [0x848e8, .rodata, ov_SC06_000_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8491c, data, tail4] + - [0x84990, .rodata, ov_SC06_000_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x849a4, data, tail5] - [0x849bc, .rodata, ov_SC06_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84a28, data, tail5] + - [0x84a28, data, tail6] - [0x84a98, .rodata, ov_SC06_000_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x84adc, .rodata, ov_SC06_000_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84b24, data, tail6] + - [0x84b24, data, tail7] - [0x84b84, .rodata, ov_SC06_000_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84bb8, data, tail7] + - [0x84bb8, data, tail8] - [0x84bbc, .rodata, ov_SC06_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84bd8, data, tail8] + - [0x84bd8, data, tail9] - [0x84bdc, .rodata, ov_SC06_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84bf8, data, tail9] + - [0x84bf8, data, tail10] - [0x84c1c, .rodata, ov_SC06_000_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84c38, data, tail10] + - [0x84c38, data, tail11] - [0x84c50, .rodata, ov_SC06_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84c70, data, tail11] + - [0x84c70, data, tail12] - [0x84cf0, .rodata, ov_SC06_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84d04, data, tail12] + - [0x84d04, data, tail13] - [0x84eac, .rodata, ov_SC06_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85024, data, tail13] + - [0x85024, data, tail14] - [0x850b4, .rodata, ov_SC06_000_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85140, data, tail14] + - [0x85140, data, tail15] - [0x8A02C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8A02F] # 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_SC06_006.yaml b/config/splat.ov_SC06_006.yaml index 16924db05..e1e95842f 100644 --- a/config/splat.ov_SC06_006.yaml +++ b/config/splat.ov_SC06_006.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_006_jr_801380E0] - [0x171f8, c, ov_SC06_006_jr_8013F350] - [0x17e80, c, ov_SC06_006_jr_8013FFD8] + - [0x184b0, c, ov_SC06_006_jr_80140608] - [0x1CA44, c, ov_SC06_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_006_after] - [0x2c2f4, c, ov_SC06_006_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xce224, data, tail4] - [0xce228, .rodata, ov_SC06_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xce25c, data, tail5] + - [0xce298, .rodata, ov_SC06_006_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xce2ac, data, tail6] - [0xce2c4, .rodata, ov_SC06_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce330, data, tail6] + - [0xce330, data, tail7] - [0xce3a0, .rodata, ov_SC06_006_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xce3e4, .rodata, ov_SC06_006_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce42c, data, tail7] + - [0xce42c, data, tail8] - [0xce48c, .rodata, ov_SC06_006_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce4c0, data, tail8] + - [0xce4c0, data, tail9] - [0xce4c4, .rodata, ov_SC06_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce4e0, data, tail9] + - [0xce4e0, data, tail10] - [0xce4e4, .rodata, ov_SC06_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce500, data, tail10] + - [0xce500, data, tail11] - [0xce524, .rodata, ov_SC06_006_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce540, data, tail11] + - [0xce540, data, tail12] - [0xce558, .rodata, ov_SC06_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce578, data, tail12] + - [0xce578, data, tail13] - [0xce5f8, .rodata, ov_SC06_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce60c, data, tail13] + - [0xce60c, data, tail14] - [0xce7b4, .rodata, ov_SC06_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce92c, data, tail14] + - [0xce92c, data, tail15] - [0xce9bc, .rodata, ov_SC06_006_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcea48, data, tail15] + - [0xcea48, data, tail16] - [0xcea60, .rodata, ov_SC06_006_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcea80, data, tail16] + - [0xcea80, data, tail17] - [0xD0A0C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xD0A0F] # 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_SC06_008.yaml b/config/splat.ov_SC06_008.yaml index d17d056ba..9f54ed609 100644 --- a/config/splat.ov_SC06_008.yaml +++ b/config/splat.ov_SC06_008.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_008_jr_801380E0] - [0x171f8, c, ov_SC06_008_jr_8013F350] - [0x17e80, c, ov_SC06_008_jr_8013FFD8] + - [0x184b0, c, ov_SC06_008_jr_80140608] - [0x1CA44, c, ov_SC06_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_008_after] - [0x2c2f4, c, ov_SC06_008_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x802fc, data, tail4] - [0x80300, .rodata, ov_SC06_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80334, data, tail5] + - [0x80370, .rodata, ov_SC06_008_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80384, data, tail6] - [0x8039c, .rodata, ov_SC06_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80408, data, tail6] + - [0x80408, data, tail7] - [0x80478, .rodata, ov_SC06_008_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x804bc, .rodata, ov_SC06_008_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80504, data, tail7] + - [0x80504, data, tail8] - [0x80564, .rodata, ov_SC06_008_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80598, data, tail8] + - [0x80598, data, tail9] - [0x8059c, .rodata, ov_SC06_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x805b8, data, tail9] + - [0x805b8, data, tail10] - [0x805bc, .rodata, ov_SC06_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x805d8, data, tail10] + - [0x805d8, data, tail11] - [0x805fc, .rodata, ov_SC06_008_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80618, data, tail11] + - [0x80618, data, tail12] - [0x80630, .rodata, ov_SC06_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80650, data, tail12] + - [0x80650, data, tail13] - [0x806d0, .rodata, ov_SC06_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x806e4, data, tail13] + - [0x806e4, data, tail14] - [0x8088c, .rodata, ov_SC06_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80a04, data, tail14] + - [0x80a04, data, tail15] - [0x80a94, .rodata, ov_SC06_008_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80b20, data, tail15] + - [0x80b20, data, tail16] - [0x80b38, .rodata, ov_SC06_008_jr_8017C294] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80b58, data, tail16] + - [0x80b58, data, tail17] - [0x826DC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x826DF] # 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_SC06_010.yaml b/config/splat.ov_SC06_010.yaml index ed616ba38..e94bb2241 100644 --- a/config/splat.ov_SC06_010.yaml +++ b/config/splat.ov_SC06_010.yaml @@ -97,6 +97,7 @@ segments: - [0x2b88, c, ov_SC06_010_jr_8012ACE0] - [0xff88, c, ov_SC06_010_jr_801380E0] - [0x171f8, c, ov_SC06_010_jr_8013F350] + - [0x184b0, c, ov_SC06_010_jr_80140608] - [0x1CA44, c, ov_SC06_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_010_after] - [0x2c2f4, c, ov_SC06_010_jr_8015444C] @@ -117,27 +118,29 @@ segments: - [0x87d10, data, tail3] - [0x8831c, .rodata, ov_SC06_010_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x88350, data, tail4] + - [0x883c4, .rodata, ov_SC06_010_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x883d8, data, tail5] - [0x883f0, .rodata, ov_SC06_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8845c, data, tail5] + - [0x8845c, data, tail6] - [0x884cc, .rodata, ov_SC06_010_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x88510, .rodata, ov_SC06_010_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88558, data, tail6] + - [0x88558, data, tail7] - [0x885b8, .rodata, ov_SC06_010_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x885ec, data, tail7] + - [0x885ec, data, tail8] - [0x885f0, .rodata, ov_SC06_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8860c, data, tail8] + - [0x8860c, data, tail9] - [0x88610, .rodata, ov_SC06_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8862c, data, tail9] + - [0x8862c, data, tail10] - [0x88650, .rodata, ov_SC06_010_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8866c, data, tail10] + - [0x8866c, data, tail11] - [0x88684, .rodata, ov_SC06_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x886a4, data, tail11] + - [0x886a4, data, tail12] - [0x88724, .rodata, ov_SC06_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88738, data, tail12] + - [0x88738, data, tail13] - [0x888e0, .rodata, ov_SC06_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88a58, data, tail13] + - [0x88a58, data, tail14] - [0x88ae8, .rodata, ov_SC06_010_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88b74, data, tail14] + - [0x88b74, data, tail15] - [0x8AB24, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8AB27] # 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_SC06_011.yaml b/config/splat.ov_SC06_011.yaml index 54836481c..16019aded 100644 --- a/config/splat.ov_SC06_011.yaml +++ b/config/splat.ov_SC06_011.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_011_jr_801380E0] - [0x171f8, c, ov_SC06_011_jr_8013F350] - [0x17e80, c, ov_SC06_011_jr_8013FFD8] + - [0x184b0, c, ov_SC06_011_jr_80140608] - [0x1CA44, c, ov_SC06_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_011_after] - [0x2c2f4, c, ov_SC06_011_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x81eb0, data, tail4] - [0x81eb4, .rodata, ov_SC06_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x81ee8, data, tail5] + - [0x81f24, .rodata, ov_SC06_011_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x81f38, data, tail6] - [0x81f50, .rodata, ov_SC06_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81fbc, data, tail6] + - [0x81fbc, data, tail7] - [0x8202c, .rodata, ov_SC06_011_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82070, .rodata, ov_SC06_011_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x820b8, data, tail7] + - [0x820b8, data, tail8] - [0x82118, .rodata, ov_SC06_011_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8214c, data, tail8] + - [0x8214c, data, tail9] - [0x82150, .rodata, ov_SC06_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8216c, data, tail9] + - [0x8216c, data, tail10] - [0x82170, .rodata, ov_SC06_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8218c, data, tail10] + - [0x8218c, data, tail11] - [0x821b0, .rodata, ov_SC06_011_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x821cc, data, tail11] + - [0x821cc, data, tail12] - [0x821e4, .rodata, ov_SC06_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82204, data, tail12] + - [0x82204, data, tail13] - [0x82284, .rodata, ov_SC06_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82298, data, tail13] + - [0x82298, data, tail14] - [0x82440, .rodata, ov_SC06_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x825b8, data, tail14] + - [0x825b8, data, tail15] - [0x82648, .rodata, ov_SC06_011_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x826d4, data, tail15] + - [0x826d4, data, tail16] - [0x826ec, .rodata, ov_SC06_011_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8270c, data, tail16] + - [0x8270c, data, tail17] - [0x83BFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x83BFF] # 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_SC06_013.yaml b/config/splat.ov_SC06_013.yaml index 39296fa1e..5a3237f37 100644 --- a/config/splat.ov_SC06_013.yaml +++ b/config/splat.ov_SC06_013.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_013_jr_801380E0] - [0x171f8, c, ov_SC06_013_jr_8013F350] - [0x17e80, c, ov_SC06_013_jr_8013FFD8] + - [0x184b0, c, ov_SC06_013_jr_80140608] - [0x1CA44, c, ov_SC06_013_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_013_after] - [0x2c2f4, c, ov_SC06_013_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x70d84, data, tail4] - [0x70d88, .rodata, ov_SC06_013_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70dbc, data, tail5] + - [0x70df8, .rodata, ov_SC06_013_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70e0c, data, tail6] - [0x70e24, .rodata, ov_SC06_013_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70e90, data, tail6] + - [0x70e90, data, tail7] - [0x70f00, .rodata, ov_SC06_013_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70f44, .rodata, ov_SC06_013_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70f8c, data, tail7] + - [0x70f8c, data, tail8] - [0x70fec, .rodata, ov_SC06_013_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71020, data, tail8] + - [0x71020, data, tail9] - [0x71024, .rodata, ov_SC06_013_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71040, data, tail9] + - [0x71040, data, tail10] - [0x71044, .rodata, ov_SC06_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71060, data, tail10] + - [0x71060, data, tail11] - [0x71084, .rodata, ov_SC06_013_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710a0, data, tail11] + - [0x710a0, data, tail12] - [0x710b8, .rodata, ov_SC06_013_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710d8, data, tail12] + - [0x710d8, data, tail13] - [0x71158, .rodata, ov_SC06_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7116c, data, tail13] + - [0x7116c, data, tail14] - [0x71314, .rodata, ov_SC06_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7148c, data, tail14] + - [0x7148c, data, tail15] - [0x7151c, .rodata, ov_SC06_013_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x715a8, data, tail15] + - [0x715a8, data, tail16] - [0x715c0, .rodata, ov_SC06_013_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x715e0, data, tail16] + - [0x715e0, data, tail17] - [0x72AAC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x72AAF] # 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_SC06_014.yaml b/config/splat.ov_SC06_014.yaml index b02a516b4..1d83f167e 100644 --- a/config/splat.ov_SC06_014.yaml +++ b/config/splat.ov_SC06_014.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_014_jr_801380E0] - [0x171f8, c, ov_SC06_014_jr_8013F350] - [0x17e80, c, ov_SC06_014_jr_8013FFD8] + - [0x184b0, c, ov_SC06_014_jr_80140608] - [0x1CA44, c, ov_SC06_014_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_014_after] - [0x2c2f4, c, ov_SC06_014_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x77774, data, tail4] - [0x77778, .rodata, ov_SC06_014_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x777ac, data, tail5] + - [0x777e8, .rodata, ov_SC06_014_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x777fc, data, tail6] - [0x77814, .rodata, ov_SC06_014_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77880, data, tail6] + - [0x77880, data, tail7] - [0x778f0, .rodata, ov_SC06_014_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77934, .rodata, ov_SC06_014_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7797c, data, tail7] + - [0x7797c, data, tail8] - [0x779dc, .rodata, ov_SC06_014_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a10, data, tail8] + - [0x77a10, data, tail9] - [0x77a14, .rodata, ov_SC06_014_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a30, data, tail9] + - [0x77a30, data, tail10] - [0x77a34, .rodata, ov_SC06_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a50, data, tail10] + - [0x77a50, data, tail11] - [0x77a74, .rodata, ov_SC06_014_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a90, data, tail11] + - [0x77a90, data, tail12] - [0x77aa8, .rodata, ov_SC06_014_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77ac8, data, tail12] + - [0x77ac8, data, tail13] - [0x77b48, .rodata, ov_SC06_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77b5c, data, tail13] + - [0x77b5c, data, tail14] - [0x77d04, .rodata, ov_SC06_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e7c, data, tail14] + - [0x77e7c, data, tail15] - [0x77f0c, .rodata, ov_SC06_014_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77f98, data, tail15] + - [0x77f98, data, tail16] - [0x77fb0, .rodata, ov_SC06_014_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77fd0, data, tail16] + - [0x77fd0, data, tail17] - [0x794C4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x794C7] # 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_SC06_015.yaml b/config/splat.ov_SC06_015.yaml index 034cc745e..ef9f74088 100644 --- a/config/splat.ov_SC06_015.yaml +++ b/config/splat.ov_SC06_015.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_015_jr_801380E0] - [0x171f8, c, ov_SC06_015_jr_8013F350] - [0x17e80, c, ov_SC06_015_jr_8013FFD8] + - [0x184b0, c, ov_SC06_015_jr_80140608] - [0x1CA44, c, ov_SC06_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_015_after] - [0x2c2f4, c, ov_SC06_015_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x6ab54, data, tail4] - [0x6ab58, .rodata, ov_SC06_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ab8c, data, tail5] + - [0x6abc8, .rodata, ov_SC06_015_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6abdc, data, tail6] - [0x6abf4, .rodata, ov_SC06_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ac60, data, tail6] + - [0x6ac60, data, tail7] - [0x6acd0, .rodata, ov_SC06_015_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ad14, .rodata, ov_SC06_015_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ad5c, data, tail7] + - [0x6ad5c, data, tail8] - [0x6adbc, .rodata, ov_SC06_015_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6adf0, data, tail8] + - [0x6adf0, data, tail9] - [0x6adf4, .rodata, ov_SC06_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ae10, data, tail9] + - [0x6ae10, data, tail10] - [0x6ae14, .rodata, ov_SC06_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ae30, data, tail10] + - [0x6ae30, data, tail11] - [0x6ae54, .rodata, ov_SC06_015_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ae70, data, tail11] + - [0x6ae70, data, tail12] - [0x6ae88, .rodata, ov_SC06_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6aea8, data, tail12] + - [0x6aea8, data, tail13] - [0x6af28, .rodata, ov_SC06_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6af3c, data, tail13] + - [0x6af3c, data, tail14] - [0x6b0e4, .rodata, ov_SC06_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b25c, data, tail14] + - [0x6b25c, data, tail15] - [0x6b2ec, .rodata, ov_SC06_015_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b378, data, tail15] + - [0x6b378, data, tail16] - [0x6b390, .rodata, ov_SC06_015_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b3b0, data, tail16] + - [0x6b3b0, data, tail17] - [0x6C8A4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6C8A7] # 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_SC06_016.yaml b/config/splat.ov_SC06_016.yaml index ccc9cc0ec..d0531c4d4 100644 --- a/config/splat.ov_SC06_016.yaml +++ b/config/splat.ov_SC06_016.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_016_jr_801380E0] - [0x171f8, c, ov_SC06_016_jr_8013F350] - [0x17e80, c, ov_SC06_016_jr_8013FFD8] + - [0x184b0, c, ov_SC06_016_jr_80140608] - [0x1CA44, c, ov_SC06_016_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_016_after] - [0x2c2f4, c, ov_SC06_016_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x7579c, data, tail4] - [0x757a0, .rodata, ov_SC06_016_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x757d4, data, tail5] + - [0x75810, .rodata, ov_SC06_016_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75824, data, tail6] - [0x7583c, .rodata, ov_SC06_016_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x758a8, data, tail6] + - [0x758a8, data, tail7] - [0x75918, .rodata, ov_SC06_016_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7595c, .rodata, ov_SC06_016_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x759a4, data, tail7] + - [0x759a4, data, tail8] - [0x75a04, .rodata, ov_SC06_016_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75a38, data, tail8] + - [0x75a38, data, tail9] - [0x75a3c, .rodata, ov_SC06_016_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75a58, data, tail9] + - [0x75a58, data, tail10] - [0x75a5c, .rodata, ov_SC06_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75a78, data, tail10] + - [0x75a78, data, tail11] - [0x75a9c, .rodata, ov_SC06_016_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75ab8, data, tail11] + - [0x75ab8, data, tail12] - [0x75ad0, .rodata, ov_SC06_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75af0, data, tail12] + - [0x75af0, data, tail13] - [0x75b70, .rodata, ov_SC06_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75b84, data, tail13] + - [0x75b84, data, tail14] - [0x75d2c, .rodata, ov_SC06_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75ea4, data, tail14] + - [0x75ea4, data, tail15] - [0x75f34, .rodata, ov_SC06_016_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75fc0, data, tail15] + - [0x75fc0, data, tail16] - [0x76110, .rodata, ov_SC06_016_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76130, data, tail16] + - [0x76130, data, tail17] - [0x78114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x78117] # 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_SC06_018.yaml b/config/splat.ov_SC06_018.yaml index 3dda717de..357cfbdbf 100644 --- a/config/splat.ov_SC06_018.yaml +++ b/config/splat.ov_SC06_018.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_018_jr_801380E0] - [0x171f8, c, ov_SC06_018_jr_8013F350] - [0x17e80, c, ov_SC06_018_jr_8013FFD8] + - [0x184b0, c, ov_SC06_018_jr_80140608] - [0x1CA44, c, ov_SC06_018_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_018_after] - [0x2c2f4, c, ov_SC06_018_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xab02c, data, tail4] - [0xab030, .rodata, ov_SC06_018_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xab064, data, tail5] + - [0xab0a0, .rodata, ov_SC06_018_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xab0b4, data, tail6] - [0xab0cc, .rodata, ov_SC06_018_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab138, data, tail6] + - [0xab138, data, tail7] - [0xab1a8, .rodata, ov_SC06_018_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xab1ec, .rodata, ov_SC06_018_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab234, data, tail7] + - [0xab234, data, tail8] - [0xab294, .rodata, ov_SC06_018_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab2c8, data, tail8] + - [0xab2c8, data, tail9] - [0xab2cc, .rodata, ov_SC06_018_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab2e8, data, tail9] + - [0xab2e8, data, tail10] - [0xab2ec, .rodata, ov_SC06_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab308, data, tail10] + - [0xab308, data, tail11] - [0xab32c, .rodata, ov_SC06_018_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab348, data, tail11] + - [0xab348, data, tail12] - [0xab360, .rodata, ov_SC06_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab380, data, tail12] + - [0xab380, data, tail13] - [0xab400, .rodata, ov_SC06_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab414, data, tail13] + - [0xab414, data, tail14] - [0xab5bc, .rodata, ov_SC06_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab734, data, tail14] + - [0xab734, data, tail15] - [0xab7c4, .rodata, ov_SC06_018_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab850, data, tail15] + - [0xab850, data, tail16] - [0xab868, .rodata, ov_SC06_018_jr_8017C24C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab888, data, tail16] + - [0xab888, data, tail17] - [0xADA44, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xADA47] # 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_SC06_020.yaml b/config/splat.ov_SC06_020.yaml index 4a3d7586a..61d4098de 100644 --- a/config/splat.ov_SC06_020.yaml +++ b/config/splat.ov_SC06_020.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_020_jr_801380E0] - [0x171f8, c, ov_SC06_020_jr_8013F350] - [0x17e80, c, ov_SC06_020_jr_8013FFD8] + - [0x184b0, c, ov_SC06_020_jr_80140608] - [0x1CA44, c, ov_SC06_020_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_020_after] - [0x2c2f4, c, ov_SC06_020_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x90914, data, tail4] - [0x90918, .rodata, ov_SC06_020_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9094c, data, tail5] + - [0x90988, .rodata, ov_SC06_020_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9099c, data, tail6] - [0x909b4, .rodata, ov_SC06_020_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90a20, data, tail6] + - [0x90a20, data, tail7] - [0x90a90, .rodata, ov_SC06_020_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x90ad4, .rodata, ov_SC06_020_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90b1c, data, tail7] + - [0x90b1c, data, tail8] - [0x90b7c, .rodata, ov_SC06_020_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90bb0, data, tail8] + - [0x90bb0, data, tail9] - [0x90bb4, .rodata, ov_SC06_020_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90bd0, data, tail9] + - [0x90bd0, data, tail10] - [0x90bd4, .rodata, ov_SC06_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90bf0, data, tail10] + - [0x90bf0, data, tail11] - [0x90c14, .rodata, ov_SC06_020_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90c30, data, tail11] + - [0x90c30, data, tail12] - [0x90c48, .rodata, ov_SC06_020_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90c68, data, tail12] + - [0x90c68, data, tail13] - [0x90ce8, .rodata, ov_SC06_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90cfc, data, tail13] + - [0x90cfc, data, tail14] - [0x90ea4, .rodata, ov_SC06_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9101c, data, tail14] + - [0x9101c, data, tail15] - [0x910ac, .rodata, ov_SC06_020_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x91138, data, tail15] + - [0x91138, data, tail16] - [0x91150, .rodata, ov_SC06_020_jr_8017C24C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x91170, data, tail16] + - [0x91170, data, tail17] - [0x92894, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x92897] # 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_SC06_022.yaml b/config/splat.ov_SC06_022.yaml index b80a80e0c..8574897da 100644 --- a/config/splat.ov_SC06_022.yaml +++ b/config/splat.ov_SC06_022.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_022_jr_801380E0] - [0x171f8, c, ov_SC06_022_jr_8013F350] - [0x17e80, c, ov_SC06_022_jr_8013FFD8] + - [0x184b0, c, ov_SC06_022_jr_80140608] - [0x1CA44, c, ov_SC06_022_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_022_after] - [0x2c2f4, c, ov_SC06_022_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xb8124, data, tail4] - [0xb8128, .rodata, ov_SC06_022_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb815c, data, tail5] + - [0xb8198, .rodata, ov_SC06_022_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb81ac, data, tail6] - [0xb81c4, .rodata, ov_SC06_022_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8230, data, tail6] + - [0xb8230, data, tail7] - [0xb82a0, .rodata, ov_SC06_022_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb82e4, .rodata, ov_SC06_022_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb832c, data, tail7] + - [0xb832c, data, tail8] - [0xb838c, .rodata, ov_SC06_022_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb83c0, data, tail8] + - [0xb83c0, data, tail9] - [0xb83c4, .rodata, ov_SC06_022_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb83e0, data, tail9] + - [0xb83e0, data, tail10] - [0xb83e4, .rodata, ov_SC06_022_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8400, data, tail10] + - [0xb8400, data, tail11] - [0xb8424, .rodata, ov_SC06_022_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8440, data, tail11] + - [0xb8440, data, tail12] - [0xb8458, .rodata, ov_SC06_022_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8478, data, tail12] + - [0xb8478, data, tail13] - [0xb84f8, .rodata, ov_SC06_022_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb850c, data, tail13] + - [0xb850c, data, tail14] - [0xb86b4, .rodata, ov_SC06_022_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb882c, data, tail14] + - [0xb882c, data, tail15] - [0xb88bc, .rodata, ov_SC06_022_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8948, data, tail15] + - [0xb8948, data, tail16] - [0xb8960, .rodata, ov_SC06_022_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8980, data, tail16] + - [0xb8980, data, tail17] - [0xBA114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBA117] # 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_SC06_024.yaml b/config/splat.ov_SC06_024.yaml index 453a32cd6..5659957d3 100644 --- a/config/splat.ov_SC06_024.yaml +++ b/config/splat.ov_SC06_024.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_024_jr_801380E0] - [0x171f8, c, ov_SC06_024_jr_8013F350] - [0x17e80, c, ov_SC06_024_jr_8013FFD8] + - [0x184b0, c, ov_SC06_024_jr_80140608] - [0x1CA44, c, ov_SC06_024_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_024_after] - [0x2c2f4, c, ov_SC06_024_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xb7268, data, tail4] - [0xb726c, .rodata, ov_SC06_024_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb72a0, data, tail5] + - [0xb72dc, .rodata, ov_SC06_024_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb72f0, data, tail6] - [0xb7308, .rodata, ov_SC06_024_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7374, data, tail6] + - [0xb7374, data, tail7] - [0xb73e4, .rodata, ov_SC06_024_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7428, .rodata, ov_SC06_024_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7470, data, tail7] + - [0xb7470, data, tail8] - [0xb74d0, .rodata, ov_SC06_024_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7504, data, tail8] + - [0xb7504, data, tail9] - [0xb7508, .rodata, ov_SC06_024_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7524, data, tail9] + - [0xb7524, data, tail10] - [0xb7528, .rodata, ov_SC06_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7544, data, tail10] + - [0xb7544, data, tail11] - [0xb7568, .rodata, ov_SC06_024_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7584, data, tail11] + - [0xb7584, data, tail12] - [0xb759c, .rodata, ov_SC06_024_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb75bc, data, tail12] + - [0xb75bc, data, tail13] - [0xb763c, .rodata, ov_SC06_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7650, data, tail13] + - [0xb7650, data, tail14] - [0xb77f8, .rodata, ov_SC06_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7970, data, tail14] + - [0xb7970, data, tail15] - [0xb7a00, .rodata, ov_SC06_024_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7a8c, data, tail15] + - [0xb7a8c, data, tail16] - [0xb7aa4, .rodata, ov_SC06_024_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7ac4, data, tail16] + - [0xb7ac4, data, tail17] - [0xB980C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xB980F] # 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_SC06_025.yaml b/config/splat.ov_SC06_025.yaml index 35803a96a..bda29ddd7 100644 --- a/config/splat.ov_SC06_025.yaml +++ b/config/splat.ov_SC06_025.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_025_jr_801380E0] - [0x171f8, c, ov_SC06_025_jr_8013F350] - [0x17e80, c, ov_SC06_025_jr_8013FFD8] + - [0x184b0, c, ov_SC06_025_jr_80140608] - [0x1CA44, c, ov_SC06_025_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_025_after] - [0x2c2f4, c, ov_SC06_025_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x87588, data, tail4] - [0x8758c, .rodata, ov_SC06_025_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x875c0, data, tail5] + - [0x875fc, .rodata, ov_SC06_025_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x87610, data, tail6] - [0x87628, .rodata, ov_SC06_025_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87694, data, tail6] + - [0x87694, data, tail7] - [0x87704, .rodata, ov_SC06_025_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87748, .rodata, ov_SC06_025_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87790, data, tail7] + - [0x87790, data, tail8] - [0x877f0, .rodata, ov_SC06_025_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87824, data, tail8] + - [0x87824, data, tail9] - [0x87828, .rodata, ov_SC06_025_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87844, data, tail9] + - [0x87844, data, tail10] - [0x87848, .rodata, ov_SC06_025_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87864, data, tail10] + - [0x87864, data, tail11] - [0x87888, .rodata, ov_SC06_025_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x878a4, data, tail11] + - [0x878a4, data, tail12] - [0x878bc, .rodata, ov_SC06_025_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x878dc, data, tail12] + - [0x878dc, data, tail13] - [0x8795c, .rodata, ov_SC06_025_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87970, data, tail13] + - [0x87970, data, tail14] - [0x87b18, .rodata, ov_SC06_025_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87c90, data, tail14] + - [0x87c90, data, tail15] - [0x87d20, .rodata, ov_SC06_025_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87dac, data, tail15] + - [0x87dac, data, tail16] - [0x87dc4, .rodata, ov_SC06_025_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87de4, data, tail16] + - [0x87de4, data, tail17] - [0x8A12C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8A12F] # 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_SC06_027.yaml b/config/splat.ov_SC06_027.yaml index f2d373427..a71fac249 100644 --- a/config/splat.ov_SC06_027.yaml +++ b/config/splat.ov_SC06_027.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_027_jr_801380E0] - [0x171f8, c, ov_SC06_027_jr_8013F350] - [0x17e80, c, ov_SC06_027_jr_8013FFD8] + - [0x184b0, c, ov_SC06_027_jr_80140608] - [0x1CA44, c, ov_SC06_027_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_027_after] - [0x2c2f4, c, ov_SC06_027_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x735c4, data, tail4] - [0x735c8, .rodata, ov_SC06_027_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x735fc, data, tail5] + - [0x73638, .rodata, ov_SC06_027_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7364c, data, tail6] - [0x73664, .rodata, ov_SC06_027_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x736d0, data, tail6] + - [0x736d0, data, tail7] - [0x73740, .rodata, ov_SC06_027_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73784, .rodata, ov_SC06_027_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x737cc, data, tail7] + - [0x737cc, data, tail8] - [0x7382c, .rodata, ov_SC06_027_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73860, data, tail8] + - [0x73860, data, tail9] - [0x73864, .rodata, ov_SC06_027_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73880, data, tail9] + - [0x73880, data, tail10] - [0x73884, .rodata, ov_SC06_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x738a0, data, tail10] + - [0x738a0, data, tail11] - [0x738c4, .rodata, ov_SC06_027_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x738e0, data, tail11] + - [0x738e0, data, tail12] - [0x738f8, .rodata, ov_SC06_027_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73918, data, tail12] + - [0x73918, data, tail13] - [0x73998, .rodata, ov_SC06_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x739ac, data, tail13] + - [0x739ac, data, tail14] - [0x73b54, .rodata, ov_SC06_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73ccc, data, tail14] + - [0x73ccc, data, tail15] - [0x73d5c, .rodata, ov_SC06_027_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73de8, data, tail15] + - [0x73de8, data, tail16] - [0x73e00, .rodata, ov_SC06_027_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73e20, data, tail16] + - [0x73e20, data, tail17] - [0x752D4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x752D7] # 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_SC06_029.yaml b/config/splat.ov_SC06_029.yaml index 7b913d690..110b1f964 100644 --- a/config/splat.ov_SC06_029.yaml +++ b/config/splat.ov_SC06_029.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_029_jr_801380E0] - [0x171f8, c, ov_SC06_029_jr_8013F350] - [0x17e80, c, ov_SC06_029_jr_8013FFD8] + - [0x184b0, c, ov_SC06_029_jr_80140608] - [0x1CA44, c, ov_SC06_029_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_029_after] - [0x2c2f4, c, ov_SC06_029_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0xb2c40, data, tail4] - [0xb2c44, .rodata, ov_SC06_029_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb2c78, data, tail5] + - [0xb2cb4, .rodata, ov_SC06_029_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb2cc8, data, tail6] - [0xb2ce0, .rodata, ov_SC06_029_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2d4c, data, tail6] + - [0xb2d4c, data, tail7] - [0xb2dbc, .rodata, ov_SC06_029_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb2e00, .rodata, ov_SC06_029_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2e48, data, tail7] + - [0xb2e48, data, tail8] - [0xb2ea8, .rodata, ov_SC06_029_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2edc, data, tail8] + - [0xb2edc, data, tail9] - [0xb2ee0, .rodata, ov_SC06_029_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2efc, data, tail9] + - [0xb2efc, data, tail10] - [0xb2f00, .rodata, ov_SC06_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2f1c, data, tail10] + - [0xb2f1c, data, tail11] - [0xb2f40, .rodata, ov_SC06_029_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2f5c, data, tail11] + - [0xb2f5c, data, tail12] - [0xb2f74, .rodata, ov_SC06_029_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2f94, data, tail12] + - [0xb2f94, data, tail13] - [0xb3014, .rodata, ov_SC06_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3028, data, tail13] + - [0xb3028, data, tail14] - [0xb31d0, .rodata, ov_SC06_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3348, data, tail14] + - [0xb3348, data, tail15] - [0xb33d8, .rodata, ov_SC06_029_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3464, data, tail15] + - [0xb3464, data, tail16] - [0xBA034, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBA037] # 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_SC06_030.yaml b/config/splat.ov_SC06_030.yaml index 013dab205..eddcf3568 100644 --- a/config/splat.ov_SC06_030.yaml +++ b/config/splat.ov_SC06_030.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_030_jr_801380E0] - [0x171f8, c, ov_SC06_030_jr_8013F350] - [0x17e80, c, ov_SC06_030_jr_8013FFD8] + - [0x184b0, c, ov_SC06_030_jr_80140608] - [0x1CA44, c, ov_SC06_030_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_030_after] - [0x2c2f4, c, ov_SC06_030_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x8ffa4, data, tail4] - [0x8ffa8, .rodata, ov_SC06_030_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8ffdc, data, tail5] + - [0x90018, .rodata, ov_SC06_030_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9002c, data, tail6] - [0x90044, .rodata, ov_SC06_030_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x900b0, data, tail6] + - [0x900b0, data, tail7] - [0x90120, .rodata, ov_SC06_030_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x90164, .rodata, ov_SC06_030_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x901ac, data, tail7] + - [0x901ac, data, tail8] - [0x9020c, .rodata, ov_SC06_030_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90240, data, tail8] + - [0x90240, data, tail9] - [0x90244, .rodata, ov_SC06_030_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90260, data, tail9] + - [0x90260, data, tail10] - [0x90264, .rodata, ov_SC06_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90280, data, tail10] + - [0x90280, data, tail11] - [0x902a4, .rodata, ov_SC06_030_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x902c0, data, tail11] + - [0x902c0, data, tail12] - [0x902d8, .rodata, ov_SC06_030_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x902f8, data, tail12] + - [0x902f8, data, tail13] - [0x90378, .rodata, ov_SC06_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9038c, data, tail13] + - [0x9038c, data, tail14] - [0x90534, .rodata, ov_SC06_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x906ac, data, tail14] + - [0x906ac, data, tail15] - [0x9073c, .rodata, ov_SC06_030_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x907c8, data, tail15] + - [0x907c8, data, tail16] - [0x90918, .rodata, ov_SC06_030_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90938, data, tail16] + - [0x90938, data, tail17] - [0x91F2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x91F2F] # 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_SC06_032.yaml b/config/splat.ov_SC06_032.yaml index 7ac724fd7..357ad88f3 100644 --- a/config/splat.ov_SC06_032.yaml +++ b/config/splat.ov_SC06_032.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_032_jr_801380E0] - [0x171f8, c, ov_SC06_032_jr_8013F350] - [0x17e80, c, ov_SC06_032_jr_8013FFD8] + - [0x184b0, c, ov_SC06_032_jr_80140608] - [0x1CA44, c, ov_SC06_032_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_032_after] - [0x2c2f4, c, ov_SC06_032_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa6600, data, tail4] - [0xa6604, .rodata, ov_SC06_032_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa6638, data, tail5] + - [0xa6674, .rodata, ov_SC06_032_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6688, data, tail6] - [0xa66a0, .rodata, ov_SC06_032_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa670c, data, tail6] + - [0xa670c, data, tail7] - [0xa677c, .rodata, ov_SC06_032_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa67c0, .rodata, ov_SC06_032_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6808, data, tail7] + - [0xa6808, data, tail8] - [0xa6868, .rodata, ov_SC06_032_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa689c, data, tail8] + - [0xa689c, data, tail9] - [0xa68a0, .rodata, ov_SC06_032_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa68bc, data, tail9] + - [0xa68bc, data, tail10] - [0xa68c0, .rodata, ov_SC06_032_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa68dc, data, tail10] + - [0xa68dc, data, tail11] - [0xa6900, .rodata, ov_SC06_032_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa691c, data, tail11] + - [0xa691c, data, tail12] - [0xa6934, .rodata, ov_SC06_032_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6954, data, tail12] + - [0xa6954, data, tail13] - [0xa69d4, .rodata, ov_SC06_032_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa69e8, data, tail13] + - [0xa69e8, data, tail14] - [0xa6b90, .rodata, ov_SC06_032_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6d08, data, tail14] + - [0xa6d08, data, tail15] - [0xa6d98, .rodata, ov_SC06_032_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6e24, data, tail15] + - [0xa6e24, data, tail16] - [0xa6e3c, .rodata, ov_SC06_032_jr_8017C24C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6e5c, data, tail16] + - [0xa6e5c, data, tail17] - [0xA9014, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA9017] # 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_SC06_033.yaml b/config/splat.ov_SC06_033.yaml index b5205be64..90511a359 100644 --- a/config/splat.ov_SC06_033.yaml +++ b/config/splat.ov_SC06_033.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC06_033_jr_801380E0] - [0x171f8, c, ov_SC06_033_jr_8013F350] - [0x17e80, c, ov_SC06_033_jr_8013FFD8] + - [0x184b0, c, ov_SC06_033_jr_80140608] - [0x1CA44, c, ov_SC06_033_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_033_after] - [0x2c2f4, c, ov_SC06_033_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa66b4, data, tail4] - [0xa66b8, .rodata, ov_SC06_033_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa66ec, data, tail5] + - [0xa6728, .rodata, ov_SC06_033_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa673c, data, tail6] - [0xa6754, .rodata, ov_SC06_033_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa67c0, data, tail6] + - [0xa67c0, data, tail7] - [0xa6830, .rodata, ov_SC06_033_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa6874, .rodata, ov_SC06_033_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa68bc, data, tail7] + - [0xa68bc, data, tail8] - [0xa691c, .rodata, ov_SC06_033_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6950, data, tail8] + - [0xa6950, data, tail9] - [0xa6954, .rodata, ov_SC06_033_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6970, data, tail9] + - [0xa6970, data, tail10] - [0xa6974, .rodata, ov_SC06_033_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6990, data, tail10] + - [0xa6990, data, tail11] - [0xa69b4, .rodata, ov_SC06_033_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa69d0, data, tail11] + - [0xa69d0, data, tail12] - [0xa69e8, .rodata, ov_SC06_033_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6a08, data, tail12] + - [0xa6a08, data, tail13] - [0xa6a88, .rodata, ov_SC06_033_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6a9c, data, tail13] + - [0xa6a9c, data, tail14] - [0xa6c44, .rodata, ov_SC06_033_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6dbc, data, tail14] + - [0xa6dbc, data, tail15] - [0xa6e4c, .rodata, ov_SC06_033_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6ed8, data, tail15] + - [0xa6ed8, data, tail16] - [0xa6ef0, .rodata, ov_SC06_033_jr_8017C24C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6f10, data, tail16] + - [0xa6f10, data, tail17] - [0xA8E94, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA8E97] # 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_SC07_000.yaml b/config/splat.ov_SC07_000.yaml index f002ed359..aef4d0166 100644 --- a/config/splat.ov_SC07_000.yaml +++ b/config/splat.ov_SC07_000.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC07_000_jr_801380E0] - [0x171f8, c, ov_SC07_000_jr_8013F350] - [0x17e80, c, ov_SC07_000_jr_8013FFD8] + - [0x184b0, c, ov_SC07_000_jr_80140608] - [0x1CA44, c, ov_SC07_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_000_after] - [0x2c2f4, c, ov_SC07_000_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0xa5d10, data, tail4] - [0xa5d14, .rodata, ov_SC07_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5d48, data, tail5] + - [0xa5d84, .rodata, ov_SC07_000_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa5d98, data, tail6] - [0xa5db0, .rodata, ov_SC07_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5e1c, data, tail6] + - [0xa5e1c, data, tail7] - [0xa5e8c, .rodata, ov_SC07_000_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5ed0, .rodata, ov_SC07_000_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5f18, data, tail7] + - [0xa5f18, data, tail8] - [0xa5f78, .rodata, ov_SC07_000_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5fac, data, tail8] + - [0xa5fac, data, tail9] - [0xa5fb0, .rodata, ov_SC07_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5fcc, data, tail9] + - [0xa5fcc, data, tail10] - [0xa5fd0, .rodata, ov_SC07_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5fec, data, tail10] + - [0xa5fec, data, tail11] - [0xa6010, .rodata, ov_SC07_000_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa602c, data, tail11] + - [0xa602c, data, tail12] - [0xa6044, .rodata, ov_SC07_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6064, data, tail12] + - [0xa6064, data, tail13] - [0xa60e4, .rodata, ov_SC07_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa60f8, data, tail13] + - [0xa60f8, data, tail14] - [0xa62a0, .rodata, ov_SC07_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6418, data, tail14] + - [0xa6418, data, tail15] - [0xa64a8, .rodata, ov_SC07_000_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6534, data, tail15] + - [0xa6534, data, tail16] - [0xa654c, .rodata, ov_SC07_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa656c, data, tail16] + - [0xa656c, data, tail17] - [0xA8B8C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA8B8F] # 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_SC07_001.yaml b/config/splat.ov_SC07_001.yaml index 47d17b797..ad9b561e8 100644 --- a/config/splat.ov_SC07_001.yaml +++ b/config/splat.ov_SC07_001.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC07_001_jr_801380E0] - [0x171f8, c, ov_SC07_001_jr_8013F350] - [0x17e80, c, ov_SC07_001_jr_8013FFD8] + - [0x184b0, c, ov_SC07_001_jr_80140608] - [0x1CA44, c, ov_SC07_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_001_after] - [0x2c2f4, c, ov_SC07_001_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x80eac, data, tail4] - [0x80eb0, .rodata, ov_SC07_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80ee4, data, tail5] + - [0x80f20, .rodata, ov_SC07_001_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80f34, data, tail6] - [0x80f4c, .rodata, ov_SC07_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80fb8, data, tail6] + - [0x80fb8, data, tail7] - [0x81028, .rodata, ov_SC07_001_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8106c, .rodata, ov_SC07_001_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x810b4, data, tail7] + - [0x810b4, data, tail8] - [0x81114, .rodata, ov_SC07_001_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81148, data, tail8] + - [0x81148, data, tail9] - [0x8114c, .rodata, ov_SC07_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81168, data, tail9] + - [0x81168, data, tail10] - [0x8116c, .rodata, ov_SC07_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81188, data, tail10] + - [0x81188, data, tail11] - [0x811ac, .rodata, ov_SC07_001_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x811c8, data, tail11] + - [0x811c8, data, tail12] - [0x811e0, .rodata, ov_SC07_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81200, data, tail12] + - [0x81200, data, tail13] - [0x81280, .rodata, ov_SC07_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81294, data, tail13] + - [0x81294, data, tail14] - [0x8143c, .rodata, ov_SC07_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x815b4, data, tail14] + - [0x815b4, data, tail15] - [0x81644, .rodata, ov_SC07_001_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x816d0, data, tail15] + - [0x816d0, data, tail16] - [0x816e8, .rodata, ov_SC07_001_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81708, data, tail16] + - [0x81708, data, tail17] - [0x82DB4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x82DB7] # 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_SC07_002.yaml b/config/splat.ov_SC07_002.yaml index 772c52f16..45a829b93 100644 --- a/config/splat.ov_SC07_002.yaml +++ b/config/splat.ov_SC07_002.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC07_002_jr_801380E0] - [0x171f8, c, ov_SC07_002_jr_8013F350] - [0x17e80, c, ov_SC07_002_jr_8013FFD8] + - [0x184b0, c, ov_SC07_002_jr_80140608] - [0x1CA44, c, ov_SC07_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_002_after] - [0x2c2f4, c, ov_SC07_002_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x71894, data, tail4] - [0x71898, .rodata, ov_SC07_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x718cc, data, tail5] + - [0x71908, .rodata, ov_SC07_002_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7191c, data, tail6] - [0x71934, .rodata, ov_SC07_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x719a0, data, tail6] + - [0x719a0, data, tail7] - [0x71a10, .rodata, ov_SC07_002_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71a54, .rodata, ov_SC07_002_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71a9c, data, tail7] + - [0x71a9c, data, tail8] - [0x71afc, .rodata, ov_SC07_002_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71b30, data, tail8] + - [0x71b30, data, tail9] - [0x71b34, .rodata, ov_SC07_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71b50, data, tail9] + - [0x71b50, data, tail10] - [0x71b54, .rodata, ov_SC07_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71b70, data, tail10] + - [0x71b70, data, tail11] - [0x71b94, .rodata, ov_SC07_002_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71bb0, data, tail11] + - [0x71bb0, data, tail12] - [0x71bc8, .rodata, ov_SC07_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71be8, data, tail12] + - [0x71be8, data, tail13] - [0x71c68, .rodata, ov_SC07_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71c7c, data, tail13] + - [0x71c7c, data, tail14] - [0x71e24, .rodata, ov_SC07_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71f9c, data, tail14] + - [0x71f9c, data, tail15] - [0x7202c, .rodata, ov_SC07_002_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x720b8, data, tail15] + - [0x720b8, data, tail16] - [0x72208, .rodata, ov_SC07_002_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72228, data, tail16] + - [0x72228, data, tail17] - [0x77F7C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x77F7F] # 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_SC07_006.yaml b/config/splat.ov_SC07_006.yaml index 485afd0ae..72ce6fa92 100644 --- a/config/splat.ov_SC07_006.yaml +++ b/config/splat.ov_SC07_006.yaml @@ -96,6 +96,7 @@ segments: - [0x0, c, ov_SC07_006] - [0x91e8, c, ov_SC07_006_jr_80131340] - [0x171f8, c, ov_SC07_006_jr_8013F350] + - [0x184b0, c, ov_SC07_006_jr_80140608] - [0x2cacc, c, ov_SC07_006_jr_80154C24] - [0x30774, c, ov_SC07_006_jr_801588CC] - [0x341d4, c, ov_SC07_006_jr_8015C32C] @@ -105,13 +106,15 @@ segments: - [0xcbbdc, data, tail2] - [0xcc2e4, .rodata, ov_SC07_006_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcc318, data, tail3] + - [0xcc38c, .rodata, ov_SC07_006_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xcc3a0, data, tail4] - [0xcc494, .rodata, ov_SC07_006_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcc4d8, .rodata, ov_SC07_006_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcc520, data, tail4] + - [0xcc520, data, tail5] - [0xcc618, .rodata, ov_SC07_006_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcc634, data, tail5] + - [0xcc634, data, tail6] - [0xccb54, .rodata, ov_SC07_006_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xccb74, data, tail6] + - [0xccb74, data, tail7] - [0xCE214, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCE217] # 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_SC07_007.yaml b/config/splat.ov_SC07_007.yaml index 5d0fb80da..684d1c4f8 100644 --- a/config/splat.ov_SC07_007.yaml +++ b/config/splat.ov_SC07_007.yaml @@ -96,6 +96,7 @@ segments: - [0x0, c, ov_SC07_007] - [0x91e8, c, ov_SC07_007_jr_80131340] - [0x171f8, c, ov_SC07_007_jr_8013F350] + - [0x184b0, c, ov_SC07_007_jr_80140608] - [0x2cacc, c, ov_SC07_007_jr_80154C24] - [0x30774, c, ov_SC07_007_jr_801588CC] - [0x341d4, c, ov_SC07_007_jr_8015C32C] @@ -105,13 +106,15 @@ segments: - [0x9d3b8, data, tail2] - [0x9dac0, .rodata, ov_SC07_007_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9daf4, data, tail3] + - [0x9db68, .rodata, ov_SC07_007_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9db7c, data, tail4] - [0x9dc70, .rodata, ov_SC07_007_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9dcb4, .rodata, ov_SC07_007_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9dcfc, data, tail4] + - [0x9dcfc, data, tail5] - [0x9ddf4, .rodata, ov_SC07_007_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9de10, data, tail5] + - [0x9de10, data, tail6] - [0x9e330, .rodata, ov_SC07_007_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e350, data, tail6] + - [0x9e350, data, tail7] - [0x9F9DC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9F9DF] # 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_SC07_008.yaml b/config/splat.ov_SC07_008.yaml index cade7a242..7d94353ab 100644 --- a/config/splat.ov_SC07_008.yaml +++ b/config/splat.ov_SC07_008.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC07_008_jr_801380E0] - [0x171f8, c, ov_SC07_008_jr_8013F350] - [0x17e80, c, ov_SC07_008_jr_8013FFD8] + - [0x184b0, c, ov_SC07_008_jr_80140608] - [0x1CA44, c, ov_SC07_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_008_after] - [0x2c2f4, c, ov_SC07_008_jr_8015444C] @@ -121,29 +122,31 @@ segments: - [0x6c8e4, data, tail4] - [0x6c8e8, .rodata, ov_SC07_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c91c, data, tail5] + - [0x6c958, .rodata, ov_SC07_008_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6c96c, data, tail6] - [0x6c984, .rodata, ov_SC07_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c9f0, data, tail6] + - [0x6c9f0, data, tail7] - [0x6ca60, .rodata, ov_SC07_008_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6caa4, .rodata, ov_SC07_008_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6caec, data, tail7] + - [0x6caec, data, tail8] - [0x6cb4c, .rodata, ov_SC07_008_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cb80, data, tail8] + - [0x6cb80, data, tail9] - [0x6cb84, .rodata, ov_SC07_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cba0, data, tail9] + - [0x6cba0, data, tail10] - [0x6cba4, .rodata, ov_SC07_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cbc0, data, tail10] + - [0x6cbc0, data, tail11] - [0x6cbe4, .rodata, ov_SC07_008_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cc00, data, tail11] + - [0x6cc00, data, tail12] - [0x6cc18, .rodata, ov_SC07_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cc38, data, tail12] + - [0x6cc38, data, tail13] - [0x6ccb8, .rodata, ov_SC07_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cccc, data, tail13] + - [0x6cccc, data, tail14] - [0x6ce74, .rodata, ov_SC07_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cfec, data, tail14] + - [0x6cfec, data, tail15] - [0x6d07c, .rodata, ov_SC07_008_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d108, data, tail15] + - [0x6d108, data, tail16] - [0x6d120, .rodata, ov_SC07_008_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d140, data, tail16] + - [0x6d140, data, tail17] - [0x6E5EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6E5EF] # 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_SC07_009.yaml b/config/splat.ov_SC07_009.yaml index 1b278ec68..8b28d2994 100644 --- a/config/splat.ov_SC07_009.yaml +++ b/config/splat.ov_SC07_009.yaml @@ -98,6 +98,7 @@ segments: - [0xff88, c, ov_SC07_009_jr_801380E0] - [0x171f8, c, ov_SC07_009_jr_8013F350] - [0x17e80, c, ov_SC07_009_jr_8013FFD8] + - [0x184b0, c, ov_SC07_009_jr_80140608] - [0x1CA44, c, ov_SC07_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_009_after] - [0x2c2f4, c, ov_SC07_009_jr_8015444C] @@ -120,27 +121,29 @@ segments: - [0x79f70, data, tail4] - [0x79f74, .rodata, ov_SC07_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x79fa8, data, tail5] + - [0x79fe4, .rodata, ov_SC07_009_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x79ff8, data, tail6] - [0x7a010, .rodata, ov_SC07_009_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a07c, data, tail6] + - [0x7a07c, data, tail7] - [0x7a0ec, .rodata, ov_SC07_009_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7a130, .rodata, ov_SC07_009_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a178, data, tail7] + - [0x7a178, data, tail8] - [0x7a1d8, .rodata, ov_SC07_009_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a20c, data, tail8] + - [0x7a20c, data, tail9] - [0x7a210, .rodata, ov_SC07_009_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a22c, data, tail9] + - [0x7a22c, data, tail10] - [0x7a230, .rodata, ov_SC07_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a24c, data, tail10] + - [0x7a24c, data, tail11] - [0x7a270, .rodata, ov_SC07_009_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a28c, data, tail11] + - [0x7a28c, data, tail12] - [0x7a2a4, .rodata, ov_SC07_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a2c4, data, tail12] + - [0x7a2c4, data, tail13] - [0x7a344, .rodata, ov_SC07_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a358, data, tail13] + - [0x7a358, data, tail14] - [0x7a500, .rodata, ov_SC07_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a678, data, tail14] + - [0x7a678, data, tail15] - [0x7a708, .rodata, ov_SC07_009_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a794, data, tail15] + - [0x7a794, data, tail16] - [0x7BC7C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7BC7F] # 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_SC07_010.yaml b/config/splat.ov_SC07_010.yaml index 88dcaa8b6..d48eb874d 100644 --- a/config/splat.ov_SC07_010.yaml +++ b/config/splat.ov_SC07_010.yaml @@ -97,6 +97,7 @@ segments: - [0x13410, c, ov_SC07_010_o0] # -O0 cluster 0x8013B568..0x8013C98C (0x13410..0x14834) - [0x14834, c, ov_SC07_010_o2b] - [0x171f8, c, ov_SC07_010_jr_8013F350] + - [0x184b0, c, ov_SC07_010_jr_80140608] - [0x2cacc, c, ov_SC07_010_jr_80154C24] - [0x30774, c, ov_SC07_010_jr_801588CC] - [0x341d4, c, ov_SC07_010_jr_8015C32C] @@ -105,11 +106,13 @@ segments: - [0x7d898, data, tail2] - [0x7dfa0, .rodata, ov_SC07_010_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7dfd4, data, tail3] + - [0x7e048, .rodata, ov_SC07_010_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7e05c, data, tail4] - [0x7e150, .rodata, ov_SC07_010_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7e194, .rodata, ov_SC07_010_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7e1dc, data, tail4] + - [0x7e1dc, data, tail5] - [0x7e2d4, .rodata, ov_SC07_010_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7e2f0, data, tail5] + - [0x7e2f0, data, tail6] - [0x813EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x813EF] # 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_SC07_011.yaml b/config/splat.ov_SC07_011.yaml index 12d1cd63f..3ec572e21 100644 --- a/config/splat.ov_SC07_011.yaml +++ b/config/splat.ov_SC07_011.yaml @@ -96,6 +96,7 @@ segments: - [0x0, c, ov_SC07_011] - [0x91e8, c, ov_SC07_011_jr_80131340] - [0x171f8, c, ov_SC07_011_jr_8013F350] + - [0x184b0, c, ov_SC07_011_jr_80140608] - [0x2cacc, c, ov_SC07_011_jr_80154C24] - [0x30774, c, ov_SC07_011_jr_801588CC] - [0x341d4, c, ov_SC07_011_jr_8015C32C] @@ -105,13 +106,15 @@ segments: - [0x65f60, data, tail2] - [0x66668, .rodata, ov_SC07_011_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6669c, data, tail3] + - [0x66710, .rodata, ov_SC07_011_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66724, data, tail4] - [0x66818, .rodata, ov_SC07_011_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6685c, .rodata, ov_SC07_011_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x668a4, data, tail4] + - [0x668a4, data, tail5] - [0x6699c, .rodata, ov_SC07_011_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x669b8, data, tail5] + - [0x669b8, data, tail6] - [0x66ed8, .rodata, ov_SC07_011_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66ef8, data, tail6] + - [0x66ef8, data, tail7] - [0x683A4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x683A7] # 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_SC01_000/ov_SC01_000_jr_8013FFD8.c b/src/ov_SC01_000/ov_SC01_000_jr_8013FFD8.c index 4f80328fa..0168a2f81 100644 --- a/src/ov_SC01_000/ov_SC01_000_jr_8013FFD8.c +++ b/src/ov_SC01_000/ov_SC01_000_jr_8013FFD8.c @@ -1091,1163 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FC60; -extern u8 *D_8017FC64; -extern u8 *D_8017FC68; -extern u8 *D_8017FC6C; -extern u8 *D_8017FC70; -extern u16 *D_8017FC74[]; -extern u16 *D_8017FC7C[]; -extern u16 *D_8017FC9C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FC60; - iVar2 = func_80028D58(); - puVar3 = D_8017FC74[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FC64; - iVar2 = func_80028DE0(); - puVar3 = D_8017FC74[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FC68 + 0x18) = *D_8017FC7C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FC6C + 0x18) = *D_8017FC7C[iVar2]; - - puVar1 = D_8017FC70; - iVar2 = func_80028D9C(); - puVar3 = D_8017FC9C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017FB9C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017FB9C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017FBAC; -extern char *D_8017FBCC; -extern char *D_8017FBD0; -extern char *D_8017FBD4; -extern char *D_8017FBD8; -extern char *D_8017FBDC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017FBAC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FBCC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FBD0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FBD4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FBD8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FBDC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017FA66; -extern unsigned short D_8017FA6A; -extern unsigned short D_8017FA6E; -extern unsigned short D_8017FA72; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017FA66; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FA6A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FA6E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FA72; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017FFFC[])(void); - -void func_80141788(void) -{ - D_8017FFFC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180008[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180008[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern s16 D_8011515A; -extern u8 D_8011515C; -extern s16 D_8011515E; -extern s16 D_80115162; -extern s16 D_80115166; -extern u8 D_8017FC20; -extern u8 D_8017FC38; -extern u8 D_8017FCAC; -extern u8 D_8017FCB4; -extern s16 D_8017FF80; -extern s16 D_8017FF82; -extern void *D_801A4520; -extern void *D_801A4524; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A4520 = &D_8017FC20; - D_801A4524 = &D_8017FCAC; - } else { - D_801A4520 = &D_8017FC38; - D_801A4524 = &D_8017FCB4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017FF80 = 0xE; - D_8017FF82 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017FF84: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011514D; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u8 D_8017FF84; -extern u16 D_80115116; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017FF84); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017FF5C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017FF5C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018002C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018002C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018003C[])(void); - -void func_801425CC(void *a0) { - D_8018003C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180020; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180020); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180050[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180050[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018006C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018006C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018023C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018023C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801802F4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801802F4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A3BC4; -extern u8 D_801A4528; -extern u8 D_801A4529; -extern u8 D_801A452A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A3BC4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A4528 = mul * (local.b[0] >> 4); - D_801A4529 = mul * (local.b[1] >> 4); - D_801A452A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180044; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180044); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180060[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180060); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018022C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018022C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018024C[]; -extern unsigned char D_801802AC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018024C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801802AC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A3BC0; -extern u8 D_801A4528; -extern u8 D_801A452C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A3BC0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A4528); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A4528, 0x10); - memcpy(&D_801A452C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180404[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180404[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018052C[])(void); - -void func_80143B30(void *a0) { - D_8018052C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180538[])(void); - -void func_80143C38(void *a0) { - D_80180538[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180540[])(void); - -void func_80143C98(void *a0) { - D_80180540[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180588[])(void); - -void func_80143E68(void *a0) { - D_80180588[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018059C[])(void); - -void func_80144054(void *a0) { - D_8018059C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801805A4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801805A4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180520; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180520, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180534; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180534 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180534 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180548; -extern u8 D_80180554; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180548); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180554); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180520; -extern u8 D_80180590; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180520, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180590, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801805AC[])(void); - -void func_801449C8(void *a0) { - D_801805AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801805B4[])(void); - -void func_80144A2C(void *a0) { - D_801805B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_000/ov_SC01_000_jr_80140608.c b/src/ov_SC01_000/ov_SC01_000_jr_80140608.c new file mode 100644 index 000000000..1c39f08d1 --- /dev/null +++ b/src/ov_SC01_000/ov_SC01_000_jr_80140608.c @@ -0,0 +1,2205 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A3234; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017EEA0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A43DC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A5878; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A3234; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EBDC)(); +extern s16 (*D_8017EBE0)(); +extern M2C_UNK (*D_8017EBE8)(); +extern s32 (*D_8017EBEC)(); +extern s32 D_801A43D8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A3238; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017EF34; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(void *arg0, s32 arg1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(void *arg0, s32 arg1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182418; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017EF4C; +extern M2C_UNK D_8017EF54; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017EF5C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017EF78[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017EF84[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017EF98[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017EFE8[]; +extern s16 D_8017F018[]; +extern s16 D_8017F078[]; +extern s16 D_8017F080[]; +extern s16 D_8017F0A0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F0D8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F130[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F178[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F180[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F188[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F190[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F138; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F158; +extern void func_801321B0(int param_1); +extern int D_8017F168; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A4448; +extern s32 D_801A444C[]; +extern int D_801A4450; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F19C; +extern u8 D_8017F198; +extern s16 *D_8017F1A0; +extern u8 D_8017F1A4; +extern int D_801A4448; +extern u16 D_801A4458; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F1A0; /* holds a pointer value (*(u16**)&D_8017F1A0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F1B4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F208; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F20C[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F250; +extern u8 D_8017F294; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F2D8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F350, D_8017F352, D_8017F354, D_8017F356, D_8017F358, D_8017F35A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A44C0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A44C4; +extern s8 D_801A44C5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A44E4; +extern s32 D_801A44D8; +extern s32 D_801A44DC; +extern s32 D_801A44E8; +extern void func_8013CABC(void); +extern s32 D_801A44E0; +extern void func_8013CAE8(void); +extern s32 D_801A4510; +extern s32 D_801A4514; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A44F0; +extern s32 D_801A44F4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A5872; +extern u8 D_801A58E6; +extern u8 D_801A579A; +extern u8 D_801A5854; +extern u8 D_801A5778; +extern u8 D_801A5799; +extern s32 D_801A5858; +extern void func_8013D330(void); +extern void *D_801A44C8; +extern void *D_801A44CC; +extern void *D_801A44D0; +extern s32 D_801A44F8; +extern s32 D_801A44FC; +extern s32 D_801A4500; +extern s32 D_801A57CC[]; +extern u8 D_8017F448[]; +extern u8 D_8017F4F0[]; +extern u8 D_8017F3A0[]; +extern u8 D_8017F49C[]; +extern u8 D_8017F51C[]; +extern u8 D_8017F3F4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A44D4; +extern s32 D_801A4504; +extern s32 D_801A4508; +extern s32 D_801A450C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A44EC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017FFA8; +extern s32 D_80115188; +extern s16 D_8017FF80; +extern s16 D_8017FF82; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017FF84; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FC60; +extern u8 *D_8017FC64; +extern u8 *D_8017FC68; +extern u8 *D_8017FC6C; +extern u8 *D_8017FC70; +extern u16 *D_8017FC74[]; +extern u16 *D_8017FC7C[]; +extern u16 *D_8017FC9C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FC60; + iVar2 = func_80028D58(); + puVar3 = D_8017FC74[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FC64; + iVar2 = func_80028DE0(); + puVar3 = D_8017FC74[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FC68 + 0x18) = *D_8017FC7C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FC6C + 0x18) = *D_8017FC7C[iVar2]; + + puVar1 = D_8017FC70; + iVar2 = func_80028D9C(); + puVar3 = D_8017FC9C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017FB9C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017FB9C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017FBAC; +extern char *D_8017FBCC; +extern char *D_8017FBD0; +extern char *D_8017FBD4; +extern char *D_8017FBD8; +extern char *D_8017FBDC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017FBAC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FBCC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FBD0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FBD4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FBD8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FBDC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017FA66; +extern unsigned short D_8017FA6A; +extern unsigned short D_8017FA6E; +extern unsigned short D_8017FA72; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017FA66; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FA6A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FA6E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FA72; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017FFFC[])(void); + +void func_80141788(void) +{ + D_8017FFFC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180008[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180008[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern s16 D_8011515A; +extern u8 D_8011515C; +extern s16 D_8011515E; +extern s16 D_80115162; +extern s16 D_80115166; +extern u8 D_8017FC20; +extern u8 D_8017FC38; +extern u8 D_8017FCAC; +extern u8 D_8017FCB4; +extern s16 D_8017FF80; +extern s16 D_8017FF82; +extern void *D_801A4520; +extern void *D_801A4524; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A4520 = &D_8017FC20; + D_801A4524 = &D_8017FCAC; + } else { + D_801A4520 = &D_8017FC38; + D_801A4524 = &D_8017FCB4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017FF80 = 0xE; + D_8017FF82 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017FF84: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011514D; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u8 D_8017FF84; +extern u16 D_80115116; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017FF84); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017FF5C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017FF5C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018002C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018002C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018003C[])(void); + +void func_801425CC(void *a0) { + D_8018003C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180020; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180020); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180050[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180050[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018006C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018006C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018023C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018023C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801802F4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801802F4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A3BC4; +extern u8 D_801A4528; +extern u8 D_801A4529; +extern u8 D_801A452A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A3BC4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A4528 = mul * (local.b[0] >> 4); + D_801A4529 = mul * (local.b[1] >> 4); + D_801A452A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180044; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180044); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180060[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180060); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018022C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018022C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018024C[]; +extern unsigned char D_801802AC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018024C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801802AC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A3BC0; +extern u8 D_801A4528; +extern u8 D_801A452C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A3BC0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A4528); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A4528, 0x10); + memcpy(&D_801A452C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180404[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180404[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018052C[])(void); + +void func_80143B30(void *a0) { + D_8018052C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180538[])(void); + +void func_80143C38(void *a0) { + D_80180538[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180540[])(void); + +void func_80143C98(void *a0) { + D_80180540[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80143D28); + + +extern void (*D_80180588[])(void); + +void func_80143E68(void *a0) { + D_80180588[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018059C[])(void); + +void func_80144054(void *a0) { + D_8018059C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801805A4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801805A4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180520; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180520, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180534; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180534 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180534 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180548; +extern u8 D_80180554; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180548); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180554); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180520; +extern u8 D_80180590; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180520, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180590, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801805AC[])(void); + +void func_801449C8(void *a0) { + D_801805AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801805B4[])(void); + +void func_80144A2C(void *a0) { + D_801805B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c b/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c index 86ba5e622..0e351c171 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801848B0; -extern u8 *D_801848B4; -extern u8 *D_801848B8; -extern u8 *D_801848BC; -extern u8 *D_801848C0; -extern u16 *D_801848C4[]; -extern u16 *D_801848CC[]; -extern u16 *D_801848EC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801848B0; - iVar2 = func_80028D58(); - puVar3 = D_801848C4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801848B4; - iVar2 = func_80028DE0(); - puVar3 = D_801848C4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801848B8 + 0x18) = *D_801848CC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801848BC + 0x18) = *D_801848CC[iVar2]; - - puVar1 = D_801848C0; - iVar2 = func_80028D9C(); - puVar3 = D_801848EC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801847EC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801847EC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801847FC; -extern char *D_8018481C; -extern char *D_80184820; -extern char *D_80184824; -extern char *D_80184828; -extern char *D_8018482C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801847FC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018481C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184820; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184824; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184828; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018482C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801846B6; -extern unsigned short D_801846BA; -extern unsigned short D_801846BE; -extern unsigned short D_801846C2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801846B6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801846BA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801846BE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801846C2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80184C4C[])(void); - -void func_80141788(void) -{ - D_80184C4C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80184C58[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80184C58[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80184BD0; -extern s16 D_80184BD2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80184870; - extern u8 D_80184888; - extern u8 D_801848FC; - extern u8 D_80184904; - extern void *D_801EC7B0; - extern void *D_801EC7B4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801EC7B0 = &D_80184870; - D_801EC7B4 = &D_801848FC; - } else { - D_801EC7B0 = &D_80184888; - D_801EC7B4 = &D_80184904; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80184BD0 = 0xE; - D_80184BD2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80184BD4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80184BD4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80184BD4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80184BAC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80184BAC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80184C7C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80184C7C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80184C8C[])(void); - -void func_801425CC(void *a0) { - D_80184C8C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80184C70; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80184C70); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184CA0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184CA0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184CBC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184CBC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184E8C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184E8C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184F44[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184F44[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801EBC9C; -extern u8 D_801EC7B8; -extern u8 D_801EC7B9; -extern u8 D_801EC7BA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801EBC9C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801EC7B8 = mul * (local.b[0] >> 4); - D_801EC7B9 = mul * (local.b[1] >> 4); - D_801EC7BA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80184C94; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184C94); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184CB0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184CB0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80184E7C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80184E7C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184E9C[]; -extern unsigned char D_80184EFC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184E9C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80184EFC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801EBC98; -extern u8 D_801EC7B8; -extern u8 D_801EC7BC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801EBC98, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801EC7B8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801EC7B8, 0x10); - memcpy(&D_801EC7BC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80185054[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80185054[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018517C[])(void); - -void func_80143B30(void *a0) { - D_8018517C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80185188[])(void); - -void func_80143C38(void *a0) { - D_80185188[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80185190[])(void); - -void func_80143C98(void *a0) { - D_80185190[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80143D28); - - -extern void (*D_801851D8[])(void); - -void func_80143E68(void *a0) { - D_801851D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801851EC[])(void); - -void func_80144054(void *a0) { - D_801851EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801851F4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801851F4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80185170; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80185170, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80185184; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185184 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185184 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80185198; -extern u8 D_801851A4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185198); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801851A4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80185170; -extern u8 D_801851E0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80185170, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801851E0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801851FC[])(void); - -void func_801449C8(void *a0) { - D_801851FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80185204[])(void); - -void func_80144A2C(void *a0) { - D_80185204[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_001/ov_SC01_001_jr_80140608.c b/src/ov_SC01_001/ov_SC01_001_jr_80140608.c new file mode 100644 index 000000000..9a513f144 --- /dev/null +++ b/src/ov_SC01_001/ov_SC01_001_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801EB30C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80183AF0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801EC66C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801F3158; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801EB30C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018382C)(); +extern s16 (*D_80183830)(); +extern M2C_UNK (*D_80183838)(); +extern s32 (*D_8018383C)(); +extern s32 D_801EC668; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801EB310; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80183B84; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80187068; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80183B9C; +extern M2C_UNK D_80183BA4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80183BAC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80183BC8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80183BD4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80183BE8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80183C38[]; +extern s16 D_80183C68[]; +extern s16 D_80183CC8[]; +extern s16 D_80183CD0[]; +extern s16 D_80183CF0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80183D28[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80183D80[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80183DC8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80183DD0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80183DD8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80183DE0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80183D88; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80183DA8; +extern void func_801321B0(int param_1); +extern int D_80183DB8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801EC6D8; +extern s32 D_801EC6DC[]; +extern int D_801EC6E0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80183DEC; +extern u8 D_80183DE8; +extern s16 *D_80183DF0; +extern u8 D_80183DF4; +extern int D_801EC6D8; +extern u16 D_801EC6E8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80183DF0; /* holds a pointer value (*(u16**)&D_80183DF0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80183E04[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80183E58; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80183E5C[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80183EA0; +extern u8 D_80183EE4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183F28[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80183FA0, D_80183FA2, D_80183FA4, D_80183FA6, D_80183FA8, D_80183FAA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801EC750; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801EC754; +extern s8 D_801EC755; +extern void func_8013C9C4(void * arg0); +extern s32 D_801EC774; +extern s32 D_801EC768; +extern s32 D_801EC76C; +extern s32 D_801EC778; +extern void func_8013CABC(void); +extern s32 D_801EC770; +extern void func_8013CAE8(void); +extern s32 D_801EC7A0; +extern s32 D_801EC7A4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801EC780; +extern s32 D_801EC784; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801F3152; +extern u8 D_801F31C6; +extern u8 D_801F307A; +extern u8 D_801F3134; +extern u8 D_801F3058; +extern u8 D_801F3079; +extern s32 D_801F3138; +extern void func_8013D330(void); +extern void *D_801EC758; +extern void *D_801EC75C; +extern void *D_801EC760; +extern s32 D_801EC788; +extern s32 D_801EC78C; +extern s32 D_801EC790; +extern s32 D_801F30AC[]; +extern u8 D_80184098[]; +extern u8 D_80184140[]; +extern u8 D_80183FF0[]; +extern u8 D_801840EC[]; +extern u8 D_8018416C[]; +extern u8 D_80184044[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801EC764; +extern s32 D_801EC794; +extern s32 D_801EC798; +extern s32 D_801EC79C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801EC77C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80184BF8; +extern s32 D_80115188; +extern s16 D_80184BD0; +extern s16 D_80184BD2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80184BD4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801848B0; +extern u8 *D_801848B4; +extern u8 *D_801848B8; +extern u8 *D_801848BC; +extern u8 *D_801848C0; +extern u16 *D_801848C4[]; +extern u16 *D_801848CC[]; +extern u16 *D_801848EC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801848B0; + iVar2 = func_80028D58(); + puVar3 = D_801848C4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801848B4; + iVar2 = func_80028DE0(); + puVar3 = D_801848C4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801848B8 + 0x18) = *D_801848CC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801848BC + 0x18) = *D_801848CC[iVar2]; + + puVar1 = D_801848C0; + iVar2 = func_80028D9C(); + puVar3 = D_801848EC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801847EC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801847EC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801847FC; +extern char *D_8018481C; +extern char *D_80184820; +extern char *D_80184824; +extern char *D_80184828; +extern char *D_8018482C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801847FC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018481C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184820; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184824; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184828; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018482C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801846B6; +extern unsigned short D_801846BA; +extern unsigned short D_801846BE; +extern unsigned short D_801846C2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801846B6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801846BA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801846BE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801846C2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80184C4C[])(void); + +void func_80141788(void) +{ + D_80184C4C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80184C58[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80184C58[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80184BD0; +extern s16 D_80184BD2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80184870; + extern u8 D_80184888; + extern u8 D_801848FC; + extern u8 D_80184904; + extern void *D_801EC7B0; + extern void *D_801EC7B4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801EC7B0 = &D_80184870; + D_801EC7B4 = &D_801848FC; + } else { + D_801EC7B0 = &D_80184888; + D_801EC7B4 = &D_80184904; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80184BD0 = 0xE; + D_80184BD2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80184BD4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80184BD4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80184BD4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80184BAC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80184BAC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80184C7C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80184C7C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80184C8C[])(void); + +void func_801425CC(void *a0) { + D_80184C8C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80184C70; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80184C70); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184CA0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184CA0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184CBC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184CBC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184E8C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184E8C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184F44[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184F44[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801EBC9C; +extern u8 D_801EC7B8; +extern u8 D_801EC7B9; +extern u8 D_801EC7BA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801EBC9C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801EC7B8 = mul * (local.b[0] >> 4); + D_801EC7B9 = mul * (local.b[1] >> 4); + D_801EC7BA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80184C94; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184C94); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184CB0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184CB0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80184E7C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80184E7C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184E9C[]; +extern unsigned char D_80184EFC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184E9C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80184EFC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801EBC98; +extern u8 D_801EC7B8; +extern u8 D_801EC7BC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801EBC98, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801EC7B8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801EC7B8, 0x10); + memcpy(&D_801EC7BC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80185054[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80185054[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018517C[])(void); + +void func_80143B30(void *a0) { + D_8018517C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80185188[])(void); + +void func_80143C38(void *a0) { + D_80185188[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80185190[])(void); + +void func_80143C98(void *a0) { + D_80185190[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80143D28); + + +extern void (*D_801851D8[])(void); + +void func_80143E68(void *a0) { + D_801851D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801851EC[])(void); + +void func_80144054(void *a0) { + D_801851EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801851F4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801851F4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185170; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80185170, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80185184; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185184 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185184 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80185198; +extern u8 D_801851A4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185198); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801851A4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80185170; +extern u8 D_801851E0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80185170, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801851E0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801851FC[])(void); + +void func_801449C8(void *a0) { + D_801851FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80185204[])(void); + +void func_80144A2C(void *a0) { + D_80185204[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c b/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c index 176348faa..8f5b911f3 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80180274; -extern u8 *D_80180278; -extern u8 *D_8018027C; -extern u8 *D_80180280; -extern u8 *D_80180284; -extern u16 *D_80180288[]; -extern u16 *D_80180290[]; -extern u16 *D_801802B0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80180274; - iVar2 = func_80028D58(); - puVar3 = D_80180288[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80180278; - iVar2 = func_80028DE0(); - puVar3 = D_80180288[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018027C + 0x18) = *D_80180290[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80180280 + 0x18) = *D_80180290[iVar2]; - - puVar1 = D_80180284; - iVar2 = func_80028D9C(); - puVar3 = D_801802B0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801801B0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801801B0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801801C0; -extern char *D_801801E0; -extern char *D_801801E4; -extern char *D_801801E8; -extern char *D_801801EC; -extern char *D_801801F0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801801C0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801801E0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801801E4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801801E8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801801EC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801801F0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018007A; -extern unsigned short D_8018007E; -extern unsigned short D_80180082; -extern unsigned short D_80180086; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018007A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018007E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180082; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180086; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80180610[])(void); - -void func_80141788(void) -{ - D_80180610[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018061C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018061C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80180594; -extern s16 D_80180596; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180234; - extern u8 D_8018024C; - extern u8 D_801802C0; - extern u8 D_801802C8; - extern void *D_8018EF18; - extern void *D_8018EF1C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018EF18 = &D_80180234; - D_8018EF1C = &D_801802C0; - } else { - D_8018EF18 = &D_8018024C; - D_8018EF1C = &D_801802C8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80180594 = 0xE; - D_80180596 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80180598: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80180598; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80180598); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80180570; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80180570 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80180640[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80180640[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80180650[])(void); - -void func_801425CC(void *a0) { - D_80180650[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180634; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180634); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180664[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180664[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180680[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180680[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180850[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180850[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180908[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180908[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018E07C; -extern u8 D_8018EF20; -extern u8 D_8018EF21; -extern u8 D_8018EF22; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018E07C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018EF20 = mul * (local.b[0] >> 4); - D_8018EF21 = mul * (local.b[1] >> 4); - D_8018EF22 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180658; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180658); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180674[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180674); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80180840[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80180840[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180860[]; -extern unsigned char D_801808C0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180860); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801808C0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018E078; -extern u8 D_8018EF20; -extern u8 D_8018EF24; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018E078, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018EF20); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018EF20, 0x10); - memcpy(&D_8018EF24, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180A18[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180A18[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180B40[])(void); - -void func_80143B30(void *a0) { - D_80180B40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180B4C[])(void); - -void func_80143C38(void *a0) { - D_80180B4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180B54[])(void); - -void func_80143C98(void *a0) { - D_80180B54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180B9C[])(void); - -void func_80143E68(void *a0) { - D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180BB0[])(void); - -void func_80144054(void *a0) { - D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180BB8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180BB8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180B34; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180B34, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180B48; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180B48 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180B48 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180B5C; -extern u8 D_80180B68; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180B5C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180B68); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180B34; -extern u8 D_80180BA4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180B34, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180BA4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180BC0[])(void); - -void func_801449C8(void *a0) { - D_80180BC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180BC8[])(void); - -void func_80144A2C(void *a0) { - D_80180BC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_004/ov_SC01_004_jr_80140608.c b/src/ov_SC01_004/ov_SC01_004_jr_80140608.c new file mode 100644 index 000000000..e635ad40c --- /dev/null +++ b/src/ov_SC01_004/ov_SC01_004_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018D6EC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F4B4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018EDD4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80190360; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018D6EC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F1F0)(); +extern s16 (*D_8017F1F4)(); +extern M2C_UNK (*D_8017F1FC)(); +extern s32 (*D_8017F200)(); +extern s32 D_8018EDD0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D6F0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F548; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182A2C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F560; +extern M2C_UNK D_8017F568; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F570; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F58C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F598[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F5AC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F5FC[]; +extern s16 D_8017F62C[]; +extern s16 D_8017F68C[]; +extern s16 D_8017F694[]; +extern s16 D_8017F6B4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F6EC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F744[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F78C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F794[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F79C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F7A4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F74C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F76C; +extern void func_801321B0(int param_1); +extern int D_8017F77C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018EE40; +extern s32 D_8018EE44[]; +extern int D_8018EE48; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F7B0; +extern u8 D_8017F7AC; +extern s16 *D_8017F7B4; +extern u8 D_8017F7B8; +extern int D_8018EE40; +extern u16 D_8018EE50; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F7B4; /* holds a pointer value (*(u16**)&D_8017F7B4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F7C8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F81C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F820[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F864; +extern u8 D_8017F8A8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F8EC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F964, D_8017F966, D_8017F968, D_8017F96A, D_8017F96C, D_8017F96E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018EEB8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018EEBC; +extern s8 D_8018EEBD; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018EEDC; +extern s32 D_8018EED0; +extern s32 D_8018EED4; +extern s32 D_8018EEE0; +extern void func_8013CABC(void); +extern s32 D_8018EED8; +extern void func_8013CAE8(void); +extern s32 D_8018EF08; +extern s32 D_8018EF0C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018EEE8; +extern s32 D_8018EEEC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019035A; +extern u8 D_801903CE; +extern u8 D_80190282; +extern u8 D_8019033C; +extern u8 D_80190260; +extern u8 D_80190281; +extern s32 D_80190340; +extern void func_8013D330(void); +extern void *D_8018EEC0; +extern void *D_8018EEC4; +extern void *D_8018EEC8; +extern s32 D_8018EEF0; +extern s32 D_8018EEF4; +extern s32 D_8018EEF8; +extern s32 D_801902B4[]; +extern u8 D_8017FA5C[]; +extern u8 D_8017FB04[]; +extern u8 D_8017F9B4[]; +extern u8 D_8017FAB0[]; +extern u8 D_8017FB30[]; +extern u8 D_8017FA08[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018EECC; +extern s32 D_8018EEFC; +extern s32 D_8018EF00; +extern s32 D_8018EF04; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018EEE4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801805BC; +extern s32 D_80115188; +extern s16 D_80180594; +extern s16 D_80180596; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80180598; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80180274; +extern u8 *D_80180278; +extern u8 *D_8018027C; +extern u8 *D_80180280; +extern u8 *D_80180284; +extern u16 *D_80180288[]; +extern u16 *D_80180290[]; +extern u16 *D_801802B0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80180274; + iVar2 = func_80028D58(); + puVar3 = D_80180288[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80180278; + iVar2 = func_80028DE0(); + puVar3 = D_80180288[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018027C + 0x18) = *D_80180290[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80180280 + 0x18) = *D_80180290[iVar2]; + + puVar1 = D_80180284; + iVar2 = func_80028D9C(); + puVar3 = D_801802B0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801801B0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801801B0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801801C0; +extern char *D_801801E0; +extern char *D_801801E4; +extern char *D_801801E8; +extern char *D_801801EC; +extern char *D_801801F0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801801C0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801801E0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801801E4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801801E8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801801EC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801801F0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018007A; +extern unsigned short D_8018007E; +extern unsigned short D_80180082; +extern unsigned short D_80180086; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018007A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018007E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180082; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180086; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80180610[])(void); + +void func_80141788(void) +{ + D_80180610[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018061C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018061C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80180594; +extern s16 D_80180596; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180234; + extern u8 D_8018024C; + extern u8 D_801802C0; + extern u8 D_801802C8; + extern void *D_8018EF18; + extern void *D_8018EF1C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018EF18 = &D_80180234; + D_8018EF1C = &D_801802C0; + } else { + D_8018EF18 = &D_8018024C; + D_8018EF1C = &D_801802C8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80180594 = 0xE; + D_80180596 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80180598: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80180598; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80180598); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80180570; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80180570 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80180640[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80180640[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80180650[])(void); + +void func_801425CC(void *a0) { + D_80180650[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180634; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180634); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180664[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180664[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180680[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180680[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180850[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180850[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180908[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180908[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018E07C; +extern u8 D_8018EF20; +extern u8 D_8018EF21; +extern u8 D_8018EF22; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018E07C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018EF20 = mul * (local.b[0] >> 4); + D_8018EF21 = mul * (local.b[1] >> 4); + D_8018EF22 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180658; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180658); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180674[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180674); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80180840[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80180840[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180860[]; +extern unsigned char D_801808C0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180860); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801808C0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018E078; +extern u8 D_8018EF20; +extern u8 D_8018EF24; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018E078, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018EF20); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018EF20, 0x10); + memcpy(&D_8018EF24, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180A18[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180A18[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180B40[])(void); + +void func_80143B30(void *a0) { + D_80180B40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180B4C[])(void); + +void func_80143C38(void *a0) { + D_80180B4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180B54[])(void); + +void func_80143C98(void *a0) { + D_80180B54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80143D28); + + +extern void (*D_80180B9C[])(void); + +void func_80143E68(void *a0) { + D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180BB0[])(void); + +void func_80144054(void *a0) { + D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180BB8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180BB8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180B34; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180B34, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180B48; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180B48 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180B48 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180B5C; +extern u8 D_80180B68; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180B5C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180B68); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180B34; +extern u8 D_80180BA4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180B34, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180BA4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180BC0[])(void); + +void func_801449C8(void *a0) { + D_80180BC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180BC8[])(void); + +void func_80144A2C(void *a0) { + D_80180BC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c b/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c index 5cc44a934..d0a36e57c 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80183408; -extern u8 *D_8018340C; -extern u8 *D_80183410; -extern u8 *D_80183414; -extern u8 *D_80183418; -extern u16 *D_8018341C[]; -extern u16 *D_80183424[]; -extern u16 *D_80183444[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183408; - iVar2 = func_80028D58(); - puVar3 = D_8018341C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018340C; - iVar2 = func_80028DE0(); - puVar3 = D_8018341C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80183410 + 0x18) = *D_80183424[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80183414 + 0x18) = *D_80183424[iVar2]; - - puVar1 = D_80183418; - iVar2 = func_80028D9C(); - puVar3 = D_80183444[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183344; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183344); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183354; -extern char *D_80183374; -extern char *D_80183378; -extern char *D_8018337C; -extern char *D_80183380; -extern char *D_80183384; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183354); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183374; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183378; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018337C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183380; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183384; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018320E; -extern unsigned short D_80183212; -extern unsigned short D_80183216; -extern unsigned short D_8018321A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018320E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80183212; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80183216; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018321A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801837A4[])(void); - -void func_80141788(void) -{ - D_801837A4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801837B0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801837B0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80183728; -extern s16 D_8018372A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801833C8; - extern u8 D_801833E0; - extern u8 D_80183454; - extern u8 D_8018345C; - extern void *D_801CC678; - extern void *D_801CC67C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CC678 = &D_801833C8; - D_801CC67C = &D_80183454; - } else { - D_801CC678 = &D_801833E0; - D_801CC67C = &D_8018345C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183728 = 0xE; - D_8018372A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018372C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018372C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018372C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80183704; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80183704 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801837D4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801837D4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801837E4[])(void); - -void func_801425CC(void *a0) { - D_801837E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801837C8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801837C8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801837F8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801837F8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183814[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183814[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801839E4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801839E4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183A9C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183A9C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CB7DC; -extern u8 D_801CC680; -extern u8 D_801CC681; -extern u8 D_801CC682; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CB7DC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CC680 = mul * (local.b[0] >> 4); - D_801CC681 = mul * (local.b[1] >> 4); - D_801CC682 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801837EC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801837EC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183808[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183808); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801839D4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801839D4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801839F4[]; -extern unsigned char D_80183A54[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801839F4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183A54); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CB7D8; -extern u8 D_801CC680; -extern u8 D_801CC684; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CB7D8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CC680); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CC680, 0x10); - memcpy(&D_801CC684, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183BAC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183BAC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183CD4[])(void); - -void func_80143B30(void *a0) { - D_80183CD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183CE0[])(void); - -void func_80143C38(void *a0) { - D_80183CE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183CE8[])(void); - -void func_80143C98(void *a0) { - D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183D30[])(void); - -void func_80143E68(void *a0) { - D_80183D30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183D44[])(void); - -void func_80144054(void *a0) { - D_80183D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183D4C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183D4C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183CC8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183CC8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183CDC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183CDC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183CDC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183CF0; -extern u8 D_80183CFC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183CF0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183CFC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183CC8; -extern u8 D_80183D38; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183CC8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183D38, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183D54[])(void); - -void func_801449C8(void *a0) { - D_80183D54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183D5C[])(void); - -void func_80144A2C(void *a0) { - D_80183D5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_005/ov_SC01_005_jr_80140608.c b/src/ov_SC01_005/ov_SC01_005_jr_80140608.c new file mode 100644 index 000000000..708a5bc2b --- /dev/null +++ b/src/ov_SC01_005/ov_SC01_005_jr_80140608.c @@ -0,0 +1,2210 @@ +#include "common.h" +#include "../shared/engine_core.h" +#include "../shared/ov_setters.h" /* dedup share across the SC01/005 ≡ 006 pair (cookbook §11) */ + +/* ==== 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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CAE4C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182648[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CC534; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801CDFC0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CAE4C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182384)(); +extern s16 (*D_80182388)(); +extern M2C_UNK (*D_80182390)(); +extern s32 (*D_80182394)(); +extern s32 D_801CC530; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CAE50; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801826DC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(void *p, s16 v); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(void *p, s32 v); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185BC0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801826F4; +extern M2C_UNK D_801826FC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80182704; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80182720[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018272C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80182740[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182790[]; +extern s16 D_801827C0[]; +extern s16 D_80182820[]; +extern s16 D_80182828[]; +extern s16 D_80182848[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182880[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801828D8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80182920[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182928[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182930[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182938[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801828E0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182900; +extern void func_801321B0(int param_1); +extern int D_80182910; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CC5A0; +extern s32 D_801CC5A4[]; +extern int D_801CC5A8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182944; +extern u8 D_80182940; +extern s16 *D_80182948; +extern u8 D_8018294C; +extern int D_801CC5A0; +extern u16 D_801CC5B0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182948; /* holds a pointer value (*(u16**)&D_80182948) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018295C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801829B0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801829B4[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801829F8; +extern u8 D_80182A3C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182A80[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182AF8, D_80182AFA, D_80182AFC, D_80182AFE, D_80182B00, D_80182B02; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CC618; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CC61C; +extern s8 D_801CC61D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CC63C; +extern s32 D_801CC630; +extern s32 D_801CC634; +extern s32 D_801CC640; +extern void func_8013CABC(void); +extern s32 D_801CC638; +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern s32 D_801CC668; +extern s32 D_801CC66C; +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CC648; +extern s32 D_801CC64C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801CDFBA; +extern u8 D_801CE060; +extern u8 D_801CDEE2; +extern u8 D_801CDF9C; +extern u8 D_801CDEC0; +extern u8 D_801CDEE1; +extern s32 D_801CDFA0; +extern void func_8013D330(void); +extern void *D_801CC620; +extern void *D_801CC624; +extern void *D_801CC628; +extern s32 D_801CC650; +extern s32 D_801CC654; +extern s32 D_801CC658; +extern s32 D_801CDF14[]; +extern u8 D_80182BF0[]; +extern u8 D_80182C98[]; +extern u8 D_80182B48[]; +extern u8 D_80182C44[]; +extern u8 D_80182CC4[]; +extern u8 D_80182B9C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CC62C; +extern s32 D_801CC65C; +extern s32 D_801CC660; +extern s32 D_801CC664; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CC644; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183750; +extern s32 D_80115188; +extern s16 D_80183728; +extern s16 D_8018372A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018372C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80183408; +extern u8 *D_8018340C; +extern u8 *D_80183410; +extern u8 *D_80183414; +extern u8 *D_80183418; +extern u16 *D_8018341C[]; +extern u16 *D_80183424[]; +extern u16 *D_80183444[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183408; + iVar2 = func_80028D58(); + puVar3 = D_8018341C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018340C; + iVar2 = func_80028DE0(); + puVar3 = D_8018341C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80183410 + 0x18) = *D_80183424[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80183414 + 0x18) = *D_80183424[iVar2]; + + puVar1 = D_80183418; + iVar2 = func_80028D9C(); + puVar3 = D_80183444[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183344; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183344); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183354; +extern char *D_80183374; +extern char *D_80183378; +extern char *D_8018337C; +extern char *D_80183380; +extern char *D_80183384; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183354); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183374; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183378; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018337C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183380; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183384; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018320E; +extern unsigned short D_80183212; +extern unsigned short D_80183216; +extern unsigned short D_8018321A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018320E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80183212; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80183216; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018321A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801837A4[])(void); + +void func_80141788(void) +{ + D_801837A4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801837B0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801837B0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80183728; +extern s16 D_8018372A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801833C8; + extern u8 D_801833E0; + extern u8 D_80183454; + extern u8 D_8018345C; + extern void *D_801CC678; + extern void *D_801CC67C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CC678 = &D_801833C8; + D_801CC67C = &D_80183454; + } else { + D_801CC678 = &D_801833E0; + D_801CC67C = &D_8018345C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183728 = 0xE; + D_8018372A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018372C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018372C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018372C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80183704; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80183704 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801837D4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801837D4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801837E4[])(void); + +void func_801425CC(void *a0) { + D_801837E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801837C8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801837C8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801837F8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801837F8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183814[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183814[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801839E4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801839E4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183A9C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183A9C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CB7DC; +extern u8 D_801CC680; +extern u8 D_801CC681; +extern u8 D_801CC682; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CB7DC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CC680 = mul * (local.b[0] >> 4); + D_801CC681 = mul * (local.b[1] >> 4); + D_801CC682 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801837EC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801837EC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183808[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183808); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801839D4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801839D4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801839F4[]; +extern unsigned char D_80183A54[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801839F4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183A54); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CB7D8; +extern u8 D_801CC680; +extern u8 D_801CC684; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CB7D8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CC680); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CC680, 0x10); + memcpy(&D_801CC684, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183BAC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183BAC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183CD4[])(void); + +void func_80143B30(void *a0) { + D_80183CD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183CE0[])(void); + +void func_80143C38(void *a0) { + D_80183CE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183CE8[])(void); + +void func_80143C98(void *a0) { + D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80143D28); + + +extern void (*D_80183D30[])(void); + +void func_80143E68(void *a0) { + D_80183D30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183D44[])(void); + +void func_80144054(void *a0) { + D_80183D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183D4C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183D4C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183CC8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183CC8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183CDC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183CDC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183CDC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183CF0; +extern u8 D_80183CFC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183CF0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183CFC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183CC8; +extern u8 D_80183D38; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183CC8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183D38, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183D54[])(void); + +void func_801449C8(void *a0) { + D_80183D54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183D5C[])(void); + +void func_80144A2C(void *a0) { + D_80183D5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c b/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c index fd03af45c..1cff47dae 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80183408; -extern u8 *D_8018340C; -extern u8 *D_80183410; -extern u8 *D_80183414; -extern u8 *D_80183418; -extern u16 *D_8018341C[]; -extern u16 *D_80183424[]; -extern u16 *D_80183444[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183408; - iVar2 = func_80028D58(); - puVar3 = D_8018341C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018340C; - iVar2 = func_80028DE0(); - puVar3 = D_8018341C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80183410 + 0x18) = *D_80183424[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80183414 + 0x18) = *D_80183424[iVar2]; - - puVar1 = D_80183418; - iVar2 = func_80028D9C(); - puVar3 = D_80183444[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183344; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183344); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183354; -extern char *D_80183374; -extern char *D_80183378; -extern char *D_8018337C; -extern char *D_80183380; -extern char *D_80183384; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183354); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183374; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183378; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018337C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183380; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183384; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018320E; -extern unsigned short D_80183212; -extern unsigned short D_80183216; -extern unsigned short D_8018321A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018320E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80183212; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80183216; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018321A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801837A4[])(void); - -void func_80141788(void) -{ - D_801837A4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801837B0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801837B0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80183728; -extern s16 D_8018372A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801833C8; - extern u8 D_801833E0; - extern u8 D_80183454; - extern u8 D_8018345C; - extern void *D_801CC678; - extern void *D_801CC67C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CC678 = &D_801833C8; - D_801CC67C = &D_80183454; - } else { - D_801CC678 = &D_801833E0; - D_801CC67C = &D_8018345C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183728 = 0xE; - D_8018372A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018372C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018372C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018372C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80183704; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80183704 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801837D4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801837D4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801837E4[])(void); - -void func_801425CC(void *a0) { - D_801837E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801837C8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801837C8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801837F8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801837F8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183814[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183814[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801839E4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801839E4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183A9C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183A9C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CB7DC; -extern u8 D_801CC680; -extern u8 D_801CC681; -extern u8 D_801CC682; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CB7DC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CC680 = mul * (local.b[0] >> 4); - D_801CC681 = mul * (local.b[1] >> 4); - D_801CC682 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801837EC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801837EC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183808[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183808); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801839D4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801839D4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801839F4[]; -extern unsigned char D_80183A54[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801839F4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183A54); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CB7D8; -extern u8 D_801CC680; -extern u8 D_801CC684; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CB7D8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CC680); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CC680, 0x10); - memcpy(&D_801CC684, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183BAC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183BAC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183CD4[])(void); - -void func_80143B30(void *a0) { - D_80183CD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183CE0[])(void); - -void func_80143C38(void *a0) { - D_80183CE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183CE8[])(void); - -void func_80143C98(void *a0) { - D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183D30[])(void); - -void func_80143E68(void *a0) { - D_80183D30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183D44[])(void); - -void func_80144054(void *a0) { - D_80183D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183D4C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183D4C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183CC8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183CC8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183CDC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183CDC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183CDC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183CF0; -extern u8 D_80183CFC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183CF0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183CFC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183CC8; -extern u8 D_80183D38; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183CC8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183D38, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183D54[])(void); - -void func_801449C8(void *a0) { - D_80183D54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183D5C[])(void); - -void func_80144A2C(void *a0) { - D_80183D5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_006/ov_SC01_006_jr_80140608.c b/src/ov_SC01_006/ov_SC01_006_jr_80140608.c new file mode 100644 index 000000000..685055d96 --- /dev/null +++ b/src/ov_SC01_006/ov_SC01_006_jr_80140608.c @@ -0,0 +1,2210 @@ +#include "common.h" +#include "../shared/engine_core.h" +#include "../shared/ov_setters.h" /* dedup share across the SC01/005 ≡ 006 pair (cookbook §11) */ + +/* ==== 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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CAE4C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182648[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CC534; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801CDFC0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CAE4C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182384)(); +extern s16 (*D_80182388)(); +extern M2C_UNK (*D_80182390)(); +extern s32 (*D_80182394)(); +extern s32 D_801CC530; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CAE50; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801826DC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(void *p, s16 v); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(void *p, s32 v); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185BC0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801826F4; +extern M2C_UNK D_801826FC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80182704; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80182720[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018272C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80182740[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182790[]; +extern s16 D_801827C0[]; +extern s16 D_80182820[]; +extern s16 D_80182828[]; +extern s16 D_80182848[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182880[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801828D8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80182920[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182928[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182930[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182938[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801828E0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182900; +extern void func_801321B0(int param_1); +extern int D_80182910; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CC5A0; +extern s32 D_801CC5A4[]; +extern int D_801CC5A8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182944; +extern u8 D_80182940; +extern s16 *D_80182948; +extern u8 D_8018294C; +extern int D_801CC5A0; +extern u16 D_801CC5B0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182948; /* holds a pointer value (*(u16**)&D_80182948) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018295C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801829B0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801829B4[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801829F8; +extern u8 D_80182A3C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182A80[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182AF8, D_80182AFA, D_80182AFC, D_80182AFE, D_80182B00, D_80182B02; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CC618; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CC61C; +extern s8 D_801CC61D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CC63C; +extern s32 D_801CC630; +extern s32 D_801CC634; +extern s32 D_801CC640; +extern void func_8013CABC(void); +extern s32 D_801CC638; +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern s32 D_801CC668; +extern s32 D_801CC66C; +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CC648; +extern s32 D_801CC64C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801CDFBA; +extern u8 D_801CE060; +extern u8 D_801CDEE2; +extern u8 D_801CDF9C; +extern u8 D_801CDEC0; +extern u8 D_801CDEE1; +extern s32 D_801CDFA0; +extern void func_8013D330(void); +extern void *D_801CC620; +extern void *D_801CC624; +extern void *D_801CC628; +extern s32 D_801CC650; +extern s32 D_801CC654; +extern s32 D_801CC658; +extern s32 D_801CDF14[]; +extern u8 D_80182BF0[]; +extern u8 D_80182C98[]; +extern u8 D_80182B48[]; +extern u8 D_80182C44[]; +extern u8 D_80182CC4[]; +extern u8 D_80182B9C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CC62C; +extern s32 D_801CC65C; +extern s32 D_801CC660; +extern s32 D_801CC664; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CC644; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183750; +extern s32 D_80115188; +extern s16 D_80183728; +extern s16 D_8018372A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018372C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80183408; +extern u8 *D_8018340C; +extern u8 *D_80183410; +extern u8 *D_80183414; +extern u8 *D_80183418; +extern u16 *D_8018341C[]; +extern u16 *D_80183424[]; +extern u16 *D_80183444[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183408; + iVar2 = func_80028D58(); + puVar3 = D_8018341C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018340C; + iVar2 = func_80028DE0(); + puVar3 = D_8018341C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80183410 + 0x18) = *D_80183424[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80183414 + 0x18) = *D_80183424[iVar2]; + + puVar1 = D_80183418; + iVar2 = func_80028D9C(); + puVar3 = D_80183444[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183344; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183344); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183354; +extern char *D_80183374; +extern char *D_80183378; +extern char *D_8018337C; +extern char *D_80183380; +extern char *D_80183384; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183354); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183374; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183378; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018337C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183380; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183384; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018320E; +extern unsigned short D_80183212; +extern unsigned short D_80183216; +extern unsigned short D_8018321A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018320E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80183212; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80183216; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018321A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801837A4[])(void); + +void func_80141788(void) +{ + D_801837A4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801837B0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801837B0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80183728; +extern s16 D_8018372A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801833C8; + extern u8 D_801833E0; + extern u8 D_80183454; + extern u8 D_8018345C; + extern void *D_801CC678; + extern void *D_801CC67C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CC678 = &D_801833C8; + D_801CC67C = &D_80183454; + } else { + D_801CC678 = &D_801833E0; + D_801CC67C = &D_8018345C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183728 = 0xE; + D_8018372A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018372C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018372C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018372C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80183704; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80183704 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801837D4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801837D4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801837E4[])(void); + +void func_801425CC(void *a0) { + D_801837E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801837C8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801837C8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801837F8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801837F8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183814[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183814[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801839E4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801839E4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183A9C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183A9C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CB7DC; +extern u8 D_801CC680; +extern u8 D_801CC681; +extern u8 D_801CC682; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CB7DC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CC680 = mul * (local.b[0] >> 4); + D_801CC681 = mul * (local.b[1] >> 4); + D_801CC682 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801837EC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801837EC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183808[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183808); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801839D4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801839D4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801839F4[]; +extern unsigned char D_80183A54[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801839F4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183A54); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CB7D8; +extern u8 D_801CC680; +extern u8 D_801CC684; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CB7D8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CC680); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CC680, 0x10); + memcpy(&D_801CC684, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183BAC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183BAC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183CD4[])(void); + +void func_80143B30(void *a0) { + D_80183CD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183CE0[])(void); + +void func_80143C38(void *a0) { + D_80183CE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183CE8[])(void); + +void func_80143C98(void *a0) { + D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80143D28); + + +extern void (*D_80183D30[])(void); + +void func_80143E68(void *a0) { + D_80183D30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183D44[])(void); + +void func_80144054(void *a0) { + D_80183D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183D4C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183D4C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183CC8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183CC8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183CDC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183CDC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183CDC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183CF0; +extern u8 D_80183CFC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183CF0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183CFC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183CC8; +extern u8 D_80183D38; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183CC8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183D38, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183D54[])(void); + +void func_801449C8(void *a0) { + D_80183D54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183D5C[])(void); + +void func_80144A2C(void *a0) { + D_80183D5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c b/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c index a667ea9e6..e26dc7bed 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801807E8; -extern u8 *D_801807EC; -extern u8 *D_801807F0; -extern u8 *D_801807F4; -extern u8 *D_801807F8; -extern u16 *D_801807FC[]; -extern u16 *D_80180804[]; -extern u16 *D_80180824[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801807E8; - iVar2 = func_80028D58(); - puVar3 = D_801807FC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801807EC; - iVar2 = func_80028DE0(); - puVar3 = D_801807FC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801807F0 + 0x18) = *D_80180804[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801807F4 + 0x18) = *D_80180804[iVar2]; - - puVar1 = D_801807F8; - iVar2 = func_80028D9C(); - puVar3 = D_80180824[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180724; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180724); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180734; -extern char *D_80180754; -extern char *D_80180758; -extern char *D_8018075C; -extern char *D_80180760; -extern char *D_80180764; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180734); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180754; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180758; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018075C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180760; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180764; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801805EE; -extern unsigned short D_801805F2; -extern unsigned short D_801805F6; -extern unsigned short D_801805FA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801805EE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801805F2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801805F6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801805FA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80180B84[])(void); - -void func_80141788(void) -{ - D_80180B84[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180B90[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180B90[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80180B08; -extern s16 D_80180B0A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801807A8; - extern u8 D_801807C0; - extern u8 D_80180834; - extern u8 D_8018083C; - extern void *D_801A2128; - extern void *D_801A212C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A2128 = &D_801807A8; - D_801A212C = &D_80180834; - } else { - D_801A2128 = &D_801807C0; - D_801A212C = &D_8018083C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80180B08 = 0xE; - D_80180B0A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80180B0C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80180B0C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80180B0C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80180AE4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80180AE4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80180BB4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80180BB4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80180BC4[])(void); - -void func_801425CC(void *a0) { - D_80180BC4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180BA8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180BA8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180BD8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180BD8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180BF4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180BF4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180DC4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180DC4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180E7C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180E7C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A128C; -extern u8 D_801A2130; -extern u8 D_801A2131; -extern u8 D_801A2132; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A128C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A2130 = mul * (local.b[0] >> 4); - D_801A2131 = mul * (local.b[1] >> 4); - D_801A2132 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180BCC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180BCC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180BE8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180BE8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80180DB4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80180DB4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180DD4[]; -extern unsigned char D_80180E34[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180DD4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80180E34); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A1288; -extern u8 D_801A2130; -extern u8 D_801A2134; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A1288, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A2130); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A2130, 0x10); - memcpy(&D_801A2134, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180F8C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180F8C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801810B4[])(void); - -void func_80143B30(void *a0) { - D_801810B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801810C0[])(void); - -void func_80143C38(void *a0) { - D_801810C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801810C8[])(void); - -void func_80143C98(void *a0) { - D_801810C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80143D28); - - -extern void (*D_80181110[])(void); - -void func_80143E68(void *a0) { - D_80181110[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80181124[])(void); - -void func_80144054(void *a0) { - D_80181124[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018112C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018112C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801810A8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801810A8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801810BC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801810BC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801810BC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801810D0; -extern u8 D_801810DC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801810D0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801810DC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801810A8; -extern u8 D_80181118; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801810A8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80181118, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80181134[])(void); - -void func_801449C8(void *a0) { - D_80181134[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018113C[])(void); - -void func_80144A2C(void *a0) { - D_8018113C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_008/ov_SC01_008_jr_80140608.c b/src/ov_SC01_008/ov_SC01_008_jr_80140608.c new file mode 100644 index 000000000..7b74e3fe6 --- /dev/null +++ b/src/ov_SC01_008/ov_SC01_008_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A08FC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017FA28[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A1FE4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A3570; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A08FC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F764)(); +extern s16 (*D_8017F768)(); +extern M2C_UNK (*D_8017F770)(); +extern s32 (*D_8017F774)(); +extern s32 D_801A1FE0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A0900; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017FABC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182FA0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017FAD4; +extern M2C_UNK D_8017FADC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017FAE4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017FB00[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017FB0C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017FB20[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017FB70[]; +extern s16 D_8017FBA0[]; +extern s16 D_8017FC00[]; +extern s16 D_8017FC08[]; +extern s16 D_8017FC28[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017FC60[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017FCB8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017FD00[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017FD08[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017FD10[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017FD18[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017FCC0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017FCE0; +extern void func_801321B0(int param_1); +extern int D_8017FCF0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A2050; +extern s32 D_801A2054[]; +extern int D_801A2058; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017FD24; +extern u8 D_8017FD20; +extern s16 *D_8017FD28; +extern u8 D_8017FD2C; +extern int D_801A2050; +extern u16 D_801A2060; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017FD28; /* holds a pointer value (*(u16**)&D_8017FD28) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017FD3C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017FD90; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017FD94[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017FDD8; +extern u8 D_8017FE1C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017FE60[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017FED8, D_8017FEDA, D_8017FEDC, D_8017FEDE, D_8017FEE0, D_8017FEE2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A20C8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A20CC; +extern s8 D_801A20CD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A20EC; +extern s32 D_801A20E0; +extern s32 D_801A20E4; +extern s32 D_801A20F0; +extern void func_8013CABC(void); +extern s32 D_801A20E8; +extern void func_8013CAE8(void); +extern s32 D_801A2118; +extern s32 D_801A211C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A20F8; +extern s32 D_801A20FC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A356A; +extern u8 D_801A35DE; +extern u8 D_801A3492; +extern u8 D_801A354C; +extern u8 D_801A3470; +extern u8 D_801A3491; +extern s32 D_801A3550; +extern void func_8013D330(void); +extern void *D_801A20D0; +extern void *D_801A20D4; +extern void *D_801A20D8; +extern s32 D_801A2100; +extern s32 D_801A2104; +extern s32 D_801A2108; +extern s32 D_801A34C4[]; +extern u8 D_8017FFD0[]; +extern u8 D_80180078[]; +extern u8 D_8017FF28[]; +extern u8 D_80180024[]; +extern u8 D_801800A4[]; +extern u8 D_8017FF7C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A20DC; +extern s32 D_801A210C; +extern s32 D_801A2110; +extern s32 D_801A2114; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A20F4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180B30; +extern s32 D_80115188; +extern s16 D_80180B08; +extern s16 D_80180B0A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80180B0C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801807E8; +extern u8 *D_801807EC; +extern u8 *D_801807F0; +extern u8 *D_801807F4; +extern u8 *D_801807F8; +extern u16 *D_801807FC[]; +extern u16 *D_80180804[]; +extern u16 *D_80180824[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801807E8; + iVar2 = func_80028D58(); + puVar3 = D_801807FC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801807EC; + iVar2 = func_80028DE0(); + puVar3 = D_801807FC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801807F0 + 0x18) = *D_80180804[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801807F4 + 0x18) = *D_80180804[iVar2]; + + puVar1 = D_801807F8; + iVar2 = func_80028D9C(); + puVar3 = D_80180824[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180724; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180724); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180734; +extern char *D_80180754; +extern char *D_80180758; +extern char *D_8018075C; +extern char *D_80180760; +extern char *D_80180764; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180734); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180754; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180758; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018075C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180760; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180764; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801805EE; +extern unsigned short D_801805F2; +extern unsigned short D_801805F6; +extern unsigned short D_801805FA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801805EE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801805F2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801805F6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801805FA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80180B84[])(void); + +void func_80141788(void) +{ + D_80180B84[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180B90[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180B90[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80180B08; +extern s16 D_80180B0A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801807A8; + extern u8 D_801807C0; + extern u8 D_80180834; + extern u8 D_8018083C; + extern void *D_801A2128; + extern void *D_801A212C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A2128 = &D_801807A8; + D_801A212C = &D_80180834; + } else { + D_801A2128 = &D_801807C0; + D_801A212C = &D_8018083C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80180B08 = 0xE; + D_80180B0A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80180B0C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80180B0C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80180B0C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80180AE4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80180AE4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80180BB4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80180BB4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80180BC4[])(void); + +void func_801425CC(void *a0) { + D_80180BC4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180BA8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180BA8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180BD8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180BD8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180BF4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180BF4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180DC4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180DC4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180E7C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180E7C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A128C; +extern u8 D_801A2130; +extern u8 D_801A2131; +extern u8 D_801A2132; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A128C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A2130 = mul * (local.b[0] >> 4); + D_801A2131 = mul * (local.b[1] >> 4); + D_801A2132 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180BCC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180BCC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180BE8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180BE8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80180DB4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80180DB4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180DD4[]; +extern unsigned char D_80180E34[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180DD4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80180E34); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A1288; +extern u8 D_801A2130; +extern u8 D_801A2134; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A1288, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A2130); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A2130, 0x10); + memcpy(&D_801A2134, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180F8C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180F8C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801810B4[])(void); + +void func_80143B30(void *a0) { + D_801810B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801810C0[])(void); + +void func_80143C38(void *a0) { + D_801810C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801810C8[])(void); + +void func_80143C98(void *a0) { + D_801810C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80143D28); + + +extern void (*D_80181110[])(void); + +void func_80143E68(void *a0) { + D_80181110[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80181124[])(void); + +void func_80144054(void *a0) { + D_80181124[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018112C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018112C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801810A8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801810A8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801810BC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801810BC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801810BC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801810D0; +extern u8 D_801810DC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801810D0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801810DC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801810A8; +extern u8 D_80181118; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801810A8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80181118, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80181134[])(void); + +void func_801449C8(void *a0) { + D_80181134[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018113C[])(void); + +void func_80144A2C(void *a0) { + D_8018113C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c b/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c index f2978aabe..33b7284f1 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801839D0; -extern u8 *D_801839D4; -extern u8 *D_801839D8; -extern u8 *D_801839DC; -extern u8 *D_801839E0; -extern u16 *D_801839E4[]; -extern u16 *D_801839EC[]; -extern u16 *D_80183A0C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801839D0; - iVar2 = func_80028D58(); - puVar3 = D_801839E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801839D4; - iVar2 = func_80028DE0(); - puVar3 = D_801839E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801839D8 + 0x18) = *D_801839EC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801839DC + 0x18) = *D_801839EC[iVar2]; - - puVar1 = D_801839E0; - iVar2 = func_80028D9C(); - puVar3 = D_80183A0C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018390C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018390C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018391C; -extern char *D_8018393C; -extern char *D_80183940; -extern char *D_80183944; -extern char *D_80183948; -extern char *D_8018394C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018391C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018393C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183940; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183944; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183948; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018394C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801837D6; -extern unsigned short D_801837DA; -extern unsigned short D_801837DE; -extern unsigned short D_801837E2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801837D6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801837DA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801837DE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801837E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183D6C[])(void); - -void func_80141788(void) -{ - D_80183D6C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183D78[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183D78[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80183CF0; -extern s16 D_80183CF2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80183990; - extern u8 D_801839A8; - extern u8 D_80183A1C; - extern u8 D_80183A24; - extern void *D_801F1F88; - extern void *D_801F1F8C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801F1F88 = &D_80183990; - D_801F1F8C = &D_80183A1C; - } else { - D_801F1F88 = &D_801839A8; - D_801F1F8C = &D_80183A24; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183CF0 = 0xE; - D_80183CF2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80183CF4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80183CF4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80183CF4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80183CCC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80183CCC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183D9C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183D9C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80183DAC[])(void); - -void func_801425CC(void *a0) { - D_80183DAC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183D90; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183D90); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183DC0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183DC0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183DDC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183DDC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183FAC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183FAC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184064[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184064[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801F1050; -extern u8 D_801F1F90; -extern u8 D_801F1F91; -extern u8 D_801F1F92; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801F1050; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801F1F90 = mul * (local.b[0] >> 4); - D_801F1F91 = mul * (local.b[1] >> 4); - D_801F1F92 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80183DB4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183DB4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183DD0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183DD0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183F9C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183F9C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183FBC[]; -extern unsigned char D_8018401C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183FBC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018401C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801F104C; -extern u8 D_801F1F90; -extern u8 D_801F1F94; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801F104C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801F1F90); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801F1F90, 0x10); - memcpy(&D_801F1F94, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80184174[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80184174[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018429C[])(void); - -void func_80143B30(void *a0) { - D_8018429C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801842A8[])(void); - -void func_80143C38(void *a0) { - D_801842A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801842B0[])(void); - -void func_80143C98(void *a0) { - D_801842B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80143D28); - - -extern void (*D_801842F8[])(void); - -void func_80143E68(void *a0) { - D_801842F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018430C[])(void); - -void func_80144054(void *a0) { - D_8018430C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184314[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184314[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80184290; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80184290, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801842A4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801842A4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801842A4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801842B8; -extern u8 D_801842C4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801842B8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801842C4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80184290; -extern u8 D_80184300; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80184290, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184300, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018431C[])(void); - -void func_801449C8(void *a0) { - D_8018431C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184324[])(void); - -void func_80144A2C(void *a0) { - D_80184324[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_009/ov_SC01_009_jr_80140608.c b/src/ov_SC01_009/ov_SC01_009_jr_80140608.c new file mode 100644 index 000000000..55967f488 --- /dev/null +++ b/src/ov_SC01_009/ov_SC01_009_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801F06C0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182C10[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801F1E44; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801F33F0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801F06C0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018294C)(); +extern s16 (*D_80182950)(); +extern M2C_UNK (*D_80182958)(); +extern s32 (*D_8018295C)(); +extern s32 D_801F1E40; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801F06C4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80182CA4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80186188; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80182CBC; +extern M2C_UNK D_80182CC4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80182CCC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80182CE8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80182CF4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80182D08[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182D58[]; +extern s16 D_80182D88[]; +extern s16 D_80182DE8[]; +extern s16 D_80182DF0[]; +extern s16 D_80182E10[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182E48[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182EA0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80182EE8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182EF0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182EF8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182F00[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182EA8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182EC8; +extern void func_801321B0(int param_1); +extern int D_80182ED8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801F1EB0; +extern s32 D_801F1EB4[]; +extern int D_801F1EB8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182F0C; +extern u8 D_80182F08; +extern s16 *D_80182F10; +extern u8 D_80182F14; +extern int D_801F1EB0; +extern u16 D_801F1EC0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182F10; /* holds a pointer value (*(u16**)&D_80182F10) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182F24[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182F78; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182F7C[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80182FC0; +extern u8 D_80183004; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183048[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801830C0, D_801830C2, D_801830C4, D_801830C6, D_801830C8, D_801830CA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801F1F28; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801F1F2C; +extern s8 D_801F1F2D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801F1F4C; +extern s32 D_801F1F40; +extern s32 D_801F1F44; +extern s32 D_801F1F50; +extern void func_8013CABC(void); +extern s32 D_801F1F48; +extern void func_8013CAE8(void); +extern s32 D_801F1F78; +extern s32 D_801F1F7C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801F1F58; +extern s32 D_801F1F5C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801F33EA; +extern u8 D_801F345E; +extern u8 D_801F3312; +extern u8 D_801F33CC; +extern u8 D_801F32F0; +extern u8 D_801F3311; +extern s32 D_801F33D0; +extern void func_8013D330(void); +extern void *D_801F1F30; +extern void *D_801F1F34; +extern void *D_801F1F38; +extern s32 D_801F1F60; +extern s32 D_801F1F64; +extern s32 D_801F1F68; +extern s32 D_801F3344[]; +extern u8 D_801831B8[]; +extern u8 D_80183260[]; +extern u8 D_80183110[]; +extern u8 D_8018320C[]; +extern u8 D_8018328C[]; +extern u8 D_80183164[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801F1F3C; +extern s32 D_801F1F6C; +extern s32 D_801F1F70; +extern s32 D_801F1F74; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801F1F54; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183D18; +extern s32 D_80115188; +extern s16 D_80183CF0; +extern s16 D_80183CF2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80183CF4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801839D0; +extern u8 *D_801839D4; +extern u8 *D_801839D8; +extern u8 *D_801839DC; +extern u8 *D_801839E0; +extern u16 *D_801839E4[]; +extern u16 *D_801839EC[]; +extern u16 *D_80183A0C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801839D0; + iVar2 = func_80028D58(); + puVar3 = D_801839E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801839D4; + iVar2 = func_80028DE0(); + puVar3 = D_801839E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801839D8 + 0x18) = *D_801839EC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801839DC + 0x18) = *D_801839EC[iVar2]; + + puVar1 = D_801839E0; + iVar2 = func_80028D9C(); + puVar3 = D_80183A0C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018390C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018390C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018391C; +extern char *D_8018393C; +extern char *D_80183940; +extern char *D_80183944; +extern char *D_80183948; +extern char *D_8018394C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018391C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018393C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183940; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183944; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183948; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018394C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801837D6; +extern unsigned short D_801837DA; +extern unsigned short D_801837DE; +extern unsigned short D_801837E2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801837D6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801837DA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801837DE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801837E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183D6C[])(void); + +void func_80141788(void) +{ + D_80183D6C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183D78[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183D78[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80183CF0; +extern s16 D_80183CF2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80183990; + extern u8 D_801839A8; + extern u8 D_80183A1C; + extern u8 D_80183A24; + extern void *D_801F1F88; + extern void *D_801F1F8C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801F1F88 = &D_80183990; + D_801F1F8C = &D_80183A1C; + } else { + D_801F1F88 = &D_801839A8; + D_801F1F8C = &D_80183A24; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183CF0 = 0xE; + D_80183CF2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80183CF4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80183CF4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80183CF4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80183CCC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80183CCC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183D9C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183D9C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80183DAC[])(void); + +void func_801425CC(void *a0) { + D_80183DAC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183D90; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183D90); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183DC0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183DC0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183DDC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183DDC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183FAC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183FAC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184064[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184064[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801F1050; +extern u8 D_801F1F90; +extern u8 D_801F1F91; +extern u8 D_801F1F92; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801F1050; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801F1F90 = mul * (local.b[0] >> 4); + D_801F1F91 = mul * (local.b[1] >> 4); + D_801F1F92 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80183DB4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183DB4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183DD0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183DD0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183F9C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183F9C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183FBC[]; +extern unsigned char D_8018401C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183FBC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018401C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801F104C; +extern u8 D_801F1F90; +extern u8 D_801F1F94; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801F104C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801F1F90); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801F1F90, 0x10); + memcpy(&D_801F1F94, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80184174[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80184174[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018429C[])(void); + +void func_80143B30(void *a0) { + D_8018429C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801842A8[])(void); + +void func_80143C38(void *a0) { + D_801842A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801842B0[])(void); + +void func_80143C98(void *a0) { + D_801842B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80143D28); + + +extern void (*D_801842F8[])(void); + +void func_80143E68(void *a0) { + D_801842F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018430C[])(void); + +void func_80144054(void *a0) { + D_8018430C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184314[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184314[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80184290; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80184290, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801842A4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801842A4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801842A4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801842B8; +extern u8 D_801842C4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801842B8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801842C4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80184290; +extern u8 D_80184300; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80184290, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184300, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018431C[])(void); + +void func_801449C8(void *a0) { + D_8018431C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184324[])(void); + +void func_80144A2C(void *a0) { + D_80184324[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c b/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c index bab0a7ea6..17232d06c 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F650; -extern u8 *D_8017F654; -extern u8 *D_8017F658; -extern u8 *D_8017F65C; -extern u8 *D_8017F660; -extern u16 *D_8017F664[]; -extern u16 *D_8017F66C[]; -extern u16 *D_8017F68C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F650; - iVar2 = func_80028D58(); - puVar3 = D_8017F664[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F654; - iVar2 = func_80028DE0(); - puVar3 = D_8017F664[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F658 + 0x18) = *D_8017F66C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F65C + 0x18) = *D_8017F66C[iVar2]; - - puVar1 = D_8017F660; - iVar2 = func_80028D9C(); - puVar3 = D_8017F68C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F58C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F58C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F59C; -extern char *D_8017F5BC; -extern char *D_8017F5C0; -extern char *D_8017F5C4; -extern char *D_8017F5C8; -extern char *D_8017F5CC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F59C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F5BC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5C0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5C4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5C8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5CC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F456; -extern unsigned short D_8017F45A; -extern unsigned short D_8017F45E; -extern unsigned short D_8017F462; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F456; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F45A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F45E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F462; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F9EC[])(void); - -void func_80141788(void) -{ - D_8017F9EC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F9F8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F9F8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F970; -extern s16 D_8017F972; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F610; - extern u8 D_8017F628; - extern u8 D_8017F69C; - extern u8 D_8017F6A4; - extern void *D_8019AA08; - extern void *D_8019AA0C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019AA08 = &D_8017F610; - D_8019AA0C = &D_8017F69C; - } else { - D_8019AA08 = &D_8017F628; - D_8019AA0C = &D_8017F6A4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F970 = 0xE; - D_8017F972 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F974: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F974; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F974); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F94C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F94C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FA1C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FA1C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017FA2C[])(void); - -void func_801425CC(void *a0) { - D_8017FA2C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FA10; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FA10); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FA40[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FA40[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FA5C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FA5C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FC2C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FC2C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FCE4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FCE4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019A0E0; -extern u8 D_8019AA10; -extern u8 D_8019AA11; -extern u8 D_8019AA12; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019A0E0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019AA10 = mul * (local.b[0] >> 4); - D_8019AA11 = mul * (local.b[1] >> 4); - D_8019AA12 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017FA34; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FA34); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FA50[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FA50); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017FC1C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017FC1C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FC3C[]; -extern unsigned char D_8017FC9C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017FC3C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017FC9C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019A0DC; -extern u8 D_8019AA10; -extern u8 D_8019AA14; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019A0DC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019AA10); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019AA10, 0x10); - memcpy(&D_8019AA14, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017FDF4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017FDF4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017FF1C[])(void); - -void func_80143B30(void *a0) { - D_8017FF1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017FF28[])(void); - -void func_80143C38(void *a0) { - D_8017FF28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017FF30[])(void); - -void func_80143C98(void *a0) { - D_8017FF30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017FF78[])(void); - -void func_80143E68(void *a0) { - D_8017FF78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017FF8C[])(void); - -void func_80144054(void *a0) { - D_8017FF8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017FF94[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017FF94[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017FF10; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FF10, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017FF24; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FF24 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FF24 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017FF38; -extern u8 D_8017FF44; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FF38); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FF44); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017FF10; -extern u8 D_8017FF80; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FF10, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017FF80, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017FF9C[])(void); - -void func_801449C8(void *a0) { - D_8017FF9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017FFA4[])(void); - -void func_80144A2C(void *a0) { - D_8017FFA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_074/ov_SC01_074_jr_80140608.c b/src/ov_SC01_074/ov_SC01_074_jr_80140608.c new file mode 100644 index 000000000..06b350470 --- /dev/null +++ b/src/ov_SC01_074/ov_SC01_074_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80199750; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E890[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019A8C4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019BD00; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80199750; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017E5CC)(); +extern s16 (*D_8017E5D0)(); +extern M2C_UNK (*D_8017E5D8)(); +extern s32 (*D_8017E5DC)(); +extern s32 D_8019A8C0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80199754; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E924; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80181E08; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E93C; +extern M2C_UNK D_8017E944; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E94C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E968[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E974[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E988[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E9D8[]; +extern s16 D_8017EA08[]; +extern s16 D_8017EA68[]; +extern s16 D_8017EA70[]; +extern s16 D_8017EA90[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017EAC8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017EB20[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017EB68[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017EB70[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017EB78[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017EB80[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017EB28; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017EB48; +extern void func_801321B0(int param_1); +extern int D_8017EB58; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019A930; +extern s32 D_8019A934[]; +extern int D_8019A938; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017EB8C; +extern u8 D_8017EB88; +extern s16 *D_8017EB90; +extern u8 D_8017EB94; +extern int D_8019A930; +extern u16 D_8019A940; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017EB90; /* holds a pointer value (*(u16**)&D_8017EB90) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017EBA4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017EBF8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017EBFC[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017EC40; +extern u8 D_8017EC84; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017ECC8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017ED40, D_8017ED42, D_8017ED44, D_8017ED46, D_8017ED48, D_8017ED4A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019A9A8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019A9AC; +extern s8 D_8019A9AD; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019A9CC; +extern s32 D_8019A9C0; +extern s32 D_8019A9C4; +extern s32 D_8019A9D0; +extern void func_8013CABC(void); +extern s32 D_8019A9C8; +extern void func_8013CAE8(void); +extern s32 D_8019A9F8; +extern s32 D_8019A9FC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019A9D8; +extern s32 D_8019A9DC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019BCFA; +extern u8 D_8019BD6E; +extern u8 D_8019BC22; +extern u8 D_8019BCDC; +extern u8 D_8019BC00; +extern u8 D_8019BC21; +extern s32 D_8019BCE0; +extern void func_8013D330(void); +extern void *D_8019A9B0; +extern void *D_8019A9B4; +extern void *D_8019A9B8; +extern s32 D_8019A9E0; +extern s32 D_8019A9E4; +extern s32 D_8019A9E8; +extern s32 D_8019BC54[]; +extern u8 D_8017EE38[]; +extern u8 D_8017EEE0[]; +extern u8 D_8017ED90[]; +extern u8 D_8017EE8C[]; +extern u8 D_8017EF0C[]; +extern u8 D_8017EDE4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019A9BC; +extern s32 D_8019A9EC; +extern s32 D_8019A9F0; +extern s32 D_8019A9F4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019A9D4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F998; +extern s32 D_80115188; +extern s16 D_8017F970; +extern s16 D_8017F972; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F974; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F650; +extern u8 *D_8017F654; +extern u8 *D_8017F658; +extern u8 *D_8017F65C; +extern u8 *D_8017F660; +extern u16 *D_8017F664[]; +extern u16 *D_8017F66C[]; +extern u16 *D_8017F68C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F650; + iVar2 = func_80028D58(); + puVar3 = D_8017F664[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F654; + iVar2 = func_80028DE0(); + puVar3 = D_8017F664[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F658 + 0x18) = *D_8017F66C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F65C + 0x18) = *D_8017F66C[iVar2]; + + puVar1 = D_8017F660; + iVar2 = func_80028D9C(); + puVar3 = D_8017F68C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F58C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F58C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F59C; +extern char *D_8017F5BC; +extern char *D_8017F5C0; +extern char *D_8017F5C4; +extern char *D_8017F5C8; +extern char *D_8017F5CC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F59C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F5BC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5C0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5C4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5C8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5CC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F456; +extern unsigned short D_8017F45A; +extern unsigned short D_8017F45E; +extern unsigned short D_8017F462; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F456; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F45A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F45E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F462; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F9EC[])(void); + +void func_80141788(void) +{ + D_8017F9EC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F9F8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F9F8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F970; +extern s16 D_8017F972; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F610; + extern u8 D_8017F628; + extern u8 D_8017F69C; + extern u8 D_8017F6A4; + extern void *D_8019AA08; + extern void *D_8019AA0C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019AA08 = &D_8017F610; + D_8019AA0C = &D_8017F69C; + } else { + D_8019AA08 = &D_8017F628; + D_8019AA0C = &D_8017F6A4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F970 = 0xE; + D_8017F972 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F974: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F974; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F974); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F94C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F94C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FA1C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FA1C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017FA2C[])(void); + +void func_801425CC(void *a0) { + D_8017FA2C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FA10; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FA10); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FA40[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FA40[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FA5C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FA5C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FC2C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FC2C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FCE4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FCE4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019A0E0; +extern u8 D_8019AA10; +extern u8 D_8019AA11; +extern u8 D_8019AA12; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019A0E0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019AA10 = mul * (local.b[0] >> 4); + D_8019AA11 = mul * (local.b[1] >> 4); + D_8019AA12 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017FA34; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FA34); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FA50[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FA50); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017FC1C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017FC1C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FC3C[]; +extern unsigned char D_8017FC9C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017FC3C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017FC9C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019A0DC; +extern u8 D_8019AA10; +extern u8 D_8019AA14; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019A0DC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019AA10); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019AA10, 0x10); + memcpy(&D_8019AA14, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017FDF4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017FDF4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017FF1C[])(void); + +void func_80143B30(void *a0) { + D_8017FF1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017FF28[])(void); + +void func_80143C38(void *a0) { + D_8017FF28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017FF30[])(void); + +void func_80143C98(void *a0) { + D_8017FF30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80143D28); + + +extern void (*D_8017FF78[])(void); + +void func_80143E68(void *a0) { + D_8017FF78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017FF8C[])(void); + +void func_80144054(void *a0) { + D_8017FF8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017FF94[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017FF94[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017FF10; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FF10, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017FF24; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FF24 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FF24 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017FF38; +extern u8 D_8017FF44; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FF38); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FF44); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017FF10; +extern u8 D_8017FF80; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FF10, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017FF80, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017FF9C[])(void); + +void func_801449C8(void *a0) { + D_8017FF9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017FFA4[])(void); + +void func_80144A2C(void *a0) { + D_8017FFA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_077/ov_SC01_077.c b/src/ov_SC01_077/ov_SC01_077.c index f3ba7005b..08b25fa38 100644 --- a/src/ov_SC01_077/ov_SC01_077.c +++ b/src/ov_SC01_077/ov_SC01_077.c @@ -2159,7 +2159,101 @@ s32 func_8014032C(s32 param_1, s32 param_2) { } -INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80140608); +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + // @class: iv-combine // @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c b/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c index 3a75c4801..0ae1ab69b 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801845B0; -extern u8 *D_801845B4; -extern u8 *D_801845B8; -extern u8 *D_801845BC; -extern u8 *D_801845C0; -extern u16 *D_801845C4[]; -extern u16 *D_801845CC[]; -extern u16 *D_801845EC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801845B0; - iVar2 = func_80028D58(); - puVar3 = D_801845C4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801845B4; - iVar2 = func_80028DE0(); - puVar3 = D_801845C4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801845B8 + 0x18) = *D_801845CC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801845BC + 0x18) = *D_801845CC[iVar2]; - - puVar1 = D_801845C0; - iVar2 = func_80028D9C(); - puVar3 = D_801845EC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801844EC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801844EC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801844FC; -extern char *D_8018451C; -extern char *D_80184520; -extern char *D_80184524; -extern char *D_80184528; -extern char *D_8018452C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801844FC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018451C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184520; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184524; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184528; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018452C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801843B6; -extern unsigned short D_801843BA; -extern unsigned short D_801843BE; -extern unsigned short D_801843C2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801843B6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801843BA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801843BE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801843C2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018494C[])(void); - -void func_80141788(void) -{ - D_8018494C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80184958[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80184958[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801848D0; -extern s16 D_801848D2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80184570; - extern u8 D_80184588; - extern u8 D_801845FC; - extern u8 D_80184604; - extern void *D_801C4838; - extern void *D_801C483C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C4838 = &D_80184570; - D_801C483C = &D_801845FC; - } else { - D_801C4838 = &D_80184588; - D_801C483C = &D_80184604; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801848D0 = 0xE; - D_801848D2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801848D4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801848D4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801848D4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801848AC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801848AC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018497C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018497C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018498C[])(void); - -void func_801425CC(void *a0) { - D_8018498C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80184970; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80184970); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801849A0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801849A0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801849BC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801849BC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184B8C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184B8C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184C44[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184C44[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C3F00; -extern u8 D_801C4840; -extern u8 D_801C4841; -extern u8 D_801C4842; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C3F00; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C4840 = mul * (local.b[0] >> 4); - D_801C4841 = mul * (local.b[1] >> 4); - D_801C4842 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80184994; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184994); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801849B0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801849B0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80184B7C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80184B7C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184B9C[]; -extern unsigned char D_80184BFC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184B9C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80184BFC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C3EFC; -extern u8 D_801C4840; -extern u8 D_801C4844; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C3EFC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C4840); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C4840, 0x10); - memcpy(&D_801C4844, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80184D54[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80184D54[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80184E7C[])(void); - -void func_80143B30(void *a0) { - D_80184E7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80184E88[])(void); - -void func_80143C38(void *a0) { - D_80184E88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80184E90[])(void); - -void func_80143C98(void *a0) { - D_80184E90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80143D28); - - -extern void (*D_80184ED8[])(void); - -void func_80143E68(void *a0) { - D_80184ED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80184EEC[])(void); - -void func_80144054(void *a0) { - D_80184EEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184EF4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184EF4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80184E70; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80184E70, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80184E84; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184E84 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184E84 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80184E98; -extern u8 D_80184EA4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184E98); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184EA4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80184E70; -extern u8 D_80184EE0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80184E70, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184EE0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80184EFC[])(void); - -void func_801449C8(void *a0) { - D_80184EFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184F04[])(void); - -void func_80144A2C(void *a0) { - D_80184F04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_080/ov_SC01_080_jr_80140608.c b/src/ov_SC01_080/ov_SC01_080_jr_80140608.c new file mode 100644 index 000000000..7d3c407f7 --- /dev/null +++ b/src/ov_SC01_080/ov_SC01_080_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C3570; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801837F0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C46F4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C7EE0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C3570; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018352C)(); +extern s16 (*D_80183530)(); +extern M2C_UNK (*D_80183538)(); +extern s32 (*D_8018353C)(); +extern s32 D_801C46F0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C3574; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80183884; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80186D68; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018389C; +extern M2C_UNK D_801838A4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801838AC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801838C8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801838D4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801838E8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80183938[]; +extern s16 D_80183968[]; +extern s16 D_801839C8[]; +extern s16 D_801839D0[]; +extern s16 D_801839F0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80183A28[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80183A80[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80183AC8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80183AD0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80183AD8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80183AE0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80183A88; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80183AA8; +extern void func_801321B0(int param_1); +extern int D_80183AB8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C4760; +extern s32 D_801C4764[]; +extern int D_801C4768; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80183AEC; +extern u8 D_80183AE8; +extern s16 *D_80183AF0; +extern u8 D_80183AF4; +extern int D_801C4760; +extern u16 D_801C4770; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80183AF0; /* holds a pointer value (*(u16**)&D_80183AF0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80183B04[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80183B58; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80183B5C[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80183BA0; +extern u8 D_80183BE4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183C28[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80183CA0, D_80183CA2, D_80183CA4, D_80183CA6, D_80183CA8, D_80183CAA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C47D8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C47DC; +extern s8 D_801C47DD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C47FC; +extern s32 D_801C47F0; +extern s32 D_801C47F4; +extern s32 D_801C4800; +extern void func_8013CABC(void); +extern s32 D_801C47F8; +extern void func_8013CAE8(void); +extern s32 D_801C4828; +extern s32 D_801C482C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C4808; +extern s32 D_801C480C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C7EDE; +extern u8 D_801C7F4E; +extern u8 D_801C7E00; +extern u8 D_801C7EBC; +extern u8 D_801C75D8; +extern u8 D_801C75F9; +extern s32 D_801C7EC4; +extern void func_8013D330(void); +extern void *D_801C47E0; +extern void *D_801C47E4; +extern void *D_801C47E8; +extern s32 D_801C4810; +extern s32 D_801C4814; +extern s32 D_801C4818; +extern s32 D_801C7E34[]; +extern u8 D_80183D98[]; +extern u8 D_80183E40[]; +extern u8 D_80183CF0[]; +extern u8 D_80183DEC[]; +extern u8 D_80183E6C[]; +extern u8 D_80183D44[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C47EC; +extern s32 D_801C481C; +extern s32 D_801C4820; +extern s32 D_801C4824; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C4804; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801848F8; +extern s32 D_80115188; +extern s16 D_801848D0; +extern s16 D_801848D2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801848D4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801845B0; +extern u8 *D_801845B4; +extern u8 *D_801845B8; +extern u8 *D_801845BC; +extern u8 *D_801845C0; +extern u16 *D_801845C4[]; +extern u16 *D_801845CC[]; +extern u16 *D_801845EC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801845B0; + iVar2 = func_80028D58(); + puVar3 = D_801845C4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801845B4; + iVar2 = func_80028DE0(); + puVar3 = D_801845C4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801845B8 + 0x18) = *D_801845CC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801845BC + 0x18) = *D_801845CC[iVar2]; + + puVar1 = D_801845C0; + iVar2 = func_80028D9C(); + puVar3 = D_801845EC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801844EC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801844EC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801844FC; +extern char *D_8018451C; +extern char *D_80184520; +extern char *D_80184524; +extern char *D_80184528; +extern char *D_8018452C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801844FC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018451C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184520; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184524; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184528; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018452C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801843B6; +extern unsigned short D_801843BA; +extern unsigned short D_801843BE; +extern unsigned short D_801843C2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801843B6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801843BA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801843BE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801843C2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018494C[])(void); + +void func_80141788(void) +{ + D_8018494C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80184958[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80184958[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801848D0; +extern s16 D_801848D2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80184570; + extern u8 D_80184588; + extern u8 D_801845FC; + extern u8 D_80184604; + extern void *D_801C4838; + extern void *D_801C483C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C4838 = &D_80184570; + D_801C483C = &D_801845FC; + } else { + D_801C4838 = &D_80184588; + D_801C483C = &D_80184604; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801848D0 = 0xE; + D_801848D2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801848D4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801848D4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801848D4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801848AC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801848AC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018497C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018497C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018498C[])(void); + +void func_801425CC(void *a0) { + D_8018498C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80184970; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80184970); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801849A0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801849A0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801849BC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801849BC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184B8C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184B8C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184C44[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184C44[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C3F00; +extern u8 D_801C4840; +extern u8 D_801C4841; +extern u8 D_801C4842; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C3F00; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C4840 = mul * (local.b[0] >> 4); + D_801C4841 = mul * (local.b[1] >> 4); + D_801C4842 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80184994; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184994); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801849B0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801849B0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80184B7C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80184B7C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184B9C[]; +extern unsigned char D_80184BFC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184B9C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80184BFC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C3EFC; +extern u8 D_801C4840; +extern u8 D_801C4844; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C3EFC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C4840); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C4840, 0x10); + memcpy(&D_801C4844, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80184D54[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80184D54[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80184E7C[])(void); + +void func_80143B30(void *a0) { + D_80184E7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80184E88[])(void); + +void func_80143C38(void *a0) { + D_80184E88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80184E90[])(void); + +void func_80143C98(void *a0) { + D_80184E90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80143D28); + + +extern void (*D_80184ED8[])(void); + +void func_80143E68(void *a0) { + D_80184ED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80184EEC[])(void); + +void func_80144054(void *a0) { + D_80184EEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184EF4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184EF4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80184E70; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80184E70, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80184E84; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184E84 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184E84 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80184E98; +extern u8 D_80184EA4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184E98); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184EA4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80184E70; +extern u8 D_80184EE0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80184E70, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184EE0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80184EFC[])(void); + +void func_801449C8(void *a0) { + D_80184EFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184F04[])(void); + +void func_80144A2C(void *a0) { + D_80184F04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c b/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c index c768d9ec4..a45e58665 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801878A4; -extern u8 *D_801878A8; -extern u8 *D_801878AC; -extern u8 *D_801878B0; -extern u8 *D_801878B4; -extern u16 *D_801878B8[]; -extern u16 *D_801878C0[]; -extern u16 *D_801878E0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801878A4; - iVar2 = func_80028D58(); - puVar3 = D_801878B8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801878A8; - iVar2 = func_80028DE0(); - puVar3 = D_801878B8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801878AC + 0x18) = *D_801878C0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801878B0 + 0x18) = *D_801878C0[iVar2]; - - puVar1 = D_801878B4; - iVar2 = func_80028D9C(); - puVar3 = D_801878E0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801877E0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801877E0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801877F0; -extern char *D_80187810; -extern char *D_80187814; -extern char *D_80187818; -extern char *D_8018781C; -extern char *D_80187820; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801877F0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80187810; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187814; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187818; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018781C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187820; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801876AA; -extern unsigned short D_801876AE; -extern unsigned short D_801876B2; -extern unsigned short D_801876B6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801876AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801876AE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801876B2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801876B6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80187C40[])(void); - -void func_80141788(void) -{ - D_80187C40[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80187C4C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80187C4C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80187BC4; -extern s16 D_80187BC6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80187864; - extern u8 D_8018787C; - extern u8 D_801878F0; - extern u8 D_801878F8; - extern void *D_801C62E0; - extern void *D_801C62E4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C62E0 = &D_80187864; - D_801C62E4 = &D_801878F0; - } else { - D_801C62E0 = &D_8018787C; - D_801C62E4 = &D_801878F8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80187BC4 = 0xE; - D_80187BC6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80187BC8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80187BC8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80187BC8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80187BA0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80187BA0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80187C70[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80187C70[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80187C80[])(void); - -void func_801425CC(void *a0) { - D_80187C80[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80187C64; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80187C64); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187C94[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187C94[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187CB0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187CB0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187E80[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187E80[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187F38[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187F38[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C58D0; -extern u8 D_801C62E8; -extern u8 D_801C62E9; -extern u8 D_801C62EA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C58D0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C62E8 = mul * (local.b[0] >> 4); - D_801C62E9 = mul * (local.b[1] >> 4); - D_801C62EA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80187C88; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187C88); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187CA4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187CA4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80187E70[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80187E70[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187E90[]; -extern unsigned char D_80187EF0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187E90); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80187EF0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C58CC; -extern u8 D_801C62E8; -extern u8 D_801C62EC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C58CC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C62E8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C62E8, 0x10); - memcpy(&D_801C62EC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80188048[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80188048[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80188170[])(void); - -void func_80143B30(void *a0) { - D_80188170[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018817C[])(void); - -void func_80143C38(void *a0) { - D_8018817C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80188184[])(void); - -void func_80143C98(void *a0) { - D_80188184[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80143D28); - - -extern void (*D_801881CC[])(void); - -void func_80143E68(void *a0) { - D_801881CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801881E0[])(void); - -void func_80144054(void *a0) { - D_801881E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801881E8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801881E8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80188164; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80188164, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80188178; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188178 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188178 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018818C; -extern u8 D_80188198; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018818C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188198); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80188164; -extern u8 D_801881D4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80188164, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801881D4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801881F0[])(void); - -void func_801449C8(void *a0) { - D_801881F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801881F8[])(void); - -void func_80144A2C(void *a0) { - D_801881F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC01_084/ov_SC01_084_jr_80140608.c b/src/ov_SC01_084/ov_SC01_084_jr_80140608.c new file mode 100644 index 000000000..d578c16f6 --- /dev/null +++ b/src/ov_SC01_084/ov_SC01_084_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C4F40; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80186AE4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C619C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C7B88; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C4F40; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80186820)(); +extern s16 (*D_80186824)(); +extern M2C_UNK (*D_8018682C)(); +extern s32 (*D_80186830)(); +extern s32 D_801C6198; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C4F44; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80186B78; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018A05C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80186B90; +extern M2C_UNK D_80186B98; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80186BA0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80186BBC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80186BC8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80186BDC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80186C2C[]; +extern s16 D_80186C5C[]; +extern s16 D_80186CBC[]; +extern s16 D_80186CC4[]; +extern s16 D_80186CE4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80186D1C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80186D74[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80186DBC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80186DC4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80186DCC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80186DD4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80186D7C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80186D9C; +extern void func_801321B0(int param_1); +extern int D_80186DAC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C6208; +extern s32 D_801C620C[]; +extern int D_801C6210; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80186DE0; +extern u8 D_80186DDC; +extern s16 *D_80186DE4; +extern u8 D_80186DE8; +extern int D_801C6208; +extern u16 D_801C6218; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186DE4; /* holds a pointer value (*(u16**)&D_80186DE4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186DF8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80186E4C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186E50[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80186E94; +extern u8 D_80186ED8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80186F1C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80186F94, D_80186F96, D_80186F98, D_80186F9A, D_80186F9C, D_80186F9E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C6280; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C6284; +extern s8 D_801C6285; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C62A4; +extern s32 D_801C6298; +extern s32 D_801C629C; +extern s32 D_801C62A8; +extern void func_8013CABC(void); +extern s32 D_801C62A0; +extern void func_8013CAE8(void); +extern s32 D_801C62D0; +extern s32 D_801C62D4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C62B0; +extern s32 D_801C62B4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C7ABA; +extern u8 D_801C7BF6; +extern u8 D_801C7762; +extern u8 D_801C781C; +extern u8 D_801C7730; +extern u8 D_801C7761; +extern s32 D_801C7820; +extern void func_8013D330(void); +extern void *D_801C6288; +extern void *D_801C628C; +extern void *D_801C6290; +extern s32 D_801C62B8; +extern s32 D_801C62BC; +extern s32 D_801C62C0; +extern s32 D_801C7794[]; +extern u8 D_8018708C[]; +extern u8 D_80187134[]; +extern u8 D_80186FE4[]; +extern u8 D_801870E0[]; +extern u8 D_80187160[]; +extern u8 D_80187038[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C6294; +extern s32 D_801C62C4; +extern s32 D_801C62C8; +extern s32 D_801C62CC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C62AC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80187BEC; +extern s32 D_80115188; +extern s16 D_80187BC4; +extern s16 D_80187BC6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80187BC8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801878A4; +extern u8 *D_801878A8; +extern u8 *D_801878AC; +extern u8 *D_801878B0; +extern u8 *D_801878B4; +extern u16 *D_801878B8[]; +extern u16 *D_801878C0[]; +extern u16 *D_801878E0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801878A4; + iVar2 = func_80028D58(); + puVar3 = D_801878B8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801878A8; + iVar2 = func_80028DE0(); + puVar3 = D_801878B8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801878AC + 0x18) = *D_801878C0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801878B0 + 0x18) = *D_801878C0[iVar2]; + + puVar1 = D_801878B4; + iVar2 = func_80028D9C(); + puVar3 = D_801878E0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801877E0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801877E0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801877F0; +extern char *D_80187810; +extern char *D_80187814; +extern char *D_80187818; +extern char *D_8018781C; +extern char *D_80187820; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801877F0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80187810; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187814; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187818; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018781C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187820; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801876AA; +extern unsigned short D_801876AE; +extern unsigned short D_801876B2; +extern unsigned short D_801876B6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801876AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801876AE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801876B2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801876B6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80187C40[])(void); + +void func_80141788(void) +{ + D_80187C40[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80187C4C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80187C4C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80187BC4; +extern s16 D_80187BC6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80187864; + extern u8 D_8018787C; + extern u8 D_801878F0; + extern u8 D_801878F8; + extern void *D_801C62E0; + extern void *D_801C62E4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C62E0 = &D_80187864; + D_801C62E4 = &D_801878F0; + } else { + D_801C62E0 = &D_8018787C; + D_801C62E4 = &D_801878F8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80187BC4 = 0xE; + D_80187BC6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80187BC8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80187BC8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80187BC8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80187BA0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80187BA0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80187C70[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80187C70[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80187C80[])(void); + +void func_801425CC(void *a0) { + D_80187C80[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80187C64; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80187C64); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187C94[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187C94[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187CB0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187CB0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187E80[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187E80[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187F38[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187F38[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C58D0; +extern u8 D_801C62E8; +extern u8 D_801C62E9; +extern u8 D_801C62EA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C58D0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C62E8 = mul * (local.b[0] >> 4); + D_801C62E9 = mul * (local.b[1] >> 4); + D_801C62EA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80187C88; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187C88); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187CA4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187CA4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80187E70[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80187E70[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187E90[]; +extern unsigned char D_80187EF0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187E90); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80187EF0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C58CC; +extern u8 D_801C62E8; +extern u8 D_801C62EC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C58CC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C62E8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C62E8, 0x10); + memcpy(&D_801C62EC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80188048[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80188048[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80188170[])(void); + +void func_80143B30(void *a0) { + D_80188170[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018817C[])(void); + +void func_80143C38(void *a0) { + D_8018817C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80188184[])(void); + +void func_80143C98(void *a0) { + D_80188184[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80143D28); + + +extern void (*D_801881CC[])(void); + +void func_80143E68(void *a0) { + D_801881CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801881E0[])(void); + +void func_80144054(void *a0) { + D_801881E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801881E8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801881E8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188164; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80188164, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80188178; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188178 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188178 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018818C; +extern u8 D_80188198; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018818C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188198); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80188164; +extern u8 D_801881D4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80188164, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801881D4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801881F0[])(void); + +void func_801449C8(void *a0) { + D_801881F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801881F8[])(void); + +void func_80144A2C(void *a0) { + D_801881F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c b/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c index f0119f041..7ba58d40d 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018BC54; -extern u8 *D_8018BC58; -extern u8 *D_8018BC5C; -extern u8 *D_8018BC60; -extern u8 *D_8018BC64; -extern u16 *D_8018BC68[]; -extern u16 *D_8018BC70[]; -extern u16 *D_8018BC90[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018BC54; - iVar2 = func_80028D58(); - puVar3 = D_8018BC68[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018BC58; - iVar2 = func_80028DE0(); - puVar3 = D_8018BC68[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018BC5C + 0x18) = *D_8018BC70[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018BC60 + 0x18) = *D_8018BC70[iVar2]; - - puVar1 = D_8018BC64; - iVar2 = func_80028D9C(); - puVar3 = D_8018BC90[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018BB90; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018BB90); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018BBA0; -extern char *D_8018BBC0; -extern char *D_8018BBC4; -extern char *D_8018BBC8; -extern char *D_8018BBCC; -extern char *D_8018BBD0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018BBA0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018BBC0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBC4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBC8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBCC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBD0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018BA5A; -extern unsigned short D_8018BA5E; -extern unsigned short D_8018BA62; -extern unsigned short D_8018BA66; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018BA5A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA5E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA62; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA66; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018BFF0[])(void); - -void func_80141788(void) -{ - D_8018BFF0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018BFFC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018BFFC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018BF74; -extern s16 D_8018BF76; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018BC14; - extern u8 D_8018BC2C; - extern u8 D_8018BCA0; - extern u8 D_8018BCA8; - extern void *D_801E6E10; - extern void *D_801E6E14; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E6E10 = &D_8018BC14; - D_801E6E14 = &D_8018BCA0; - } else { - D_801E6E10 = &D_8018BC2C; - D_801E6E14 = &D_8018BCA8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018BF74 = 0xE; - D_8018BF76 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018BF78: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018BF78; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018BF78); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018BF50; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018BF50 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018C020[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018C020[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018C030[])(void); - -void func_801425CC(void *a0) { - D_8018C030[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018C014; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018C014); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C044[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C044[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C060[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C060[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C230[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C230[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C2E8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C2E8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E6124; -extern u8 D_801E6E18; -extern u8 D_801E6E19; -extern u8 D_801E6E1A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E6124; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E6E18 = mul * (local.b[0] >> 4); - D_801E6E19 = mul * (local.b[1] >> 4); - D_801E6E1A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018C038; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C038); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C054[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C054); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018C220[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018C220[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C240[]; -extern unsigned char D_8018C2A0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C240); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018C2A0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E6120; -extern u8 D_801E6E18; -extern u8 D_801E6E1C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E6120, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E6E18); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E6E18, 0x10); - memcpy(&D_801E6E1C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018C3F8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018C3F8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018C520[])(void); - -void func_80143B30(void *a0) { - D_8018C520[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018C52C[])(void); - -void func_80143C38(void *a0) { - D_8018C52C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018C534[])(void); - -void func_80143C98(void *a0) { - D_8018C534[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018C57C[])(void); - -void func_80143E68(void *a0) { - D_8018C57C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018C590[])(void); - -void func_80144054(void *a0) { - D_8018C590[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018C598[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018C598[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018C514; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018C514, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018C528; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C528 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C528 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018C53C; -extern u8 D_8018C548; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C53C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C548); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018C514; -extern u8 D_8018C584; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018C514, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018C584, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018C5A0[])(void); - -void func_801449C8(void *a0) { - D_8018C5A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018C5A8[])(void); - -void func_80144A2C(void *a0) { - D_8018C5A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_000/ov_SC02_000_jr_80140608.c b/src/ov_SC02_000/ov_SC02_000_jr_80140608.c new file mode 100644 index 000000000..d7b6ca7c2 --- /dev/null +++ b/src/ov_SC02_000/ov_SC02_000_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E5794; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018AE94[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E6CCC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E87C0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E5794; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018ABD0)(); +extern s16 (*D_8018ABD4)(); +extern M2C_UNK (*D_8018ABDC)(); +extern s32 (*D_8018ABE0)(); +extern s32 D_801E6CC8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E5798; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018AF28; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018E40C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018AF40; +extern M2C_UNK D_8018AF48; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018AF50; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018AF6C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018AF78[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018AF8C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018AFDC[]; +extern s16 D_8018B00C[]; +extern s16 D_8018B06C[]; +extern s16 D_8018B074[]; +extern s16 D_8018B094[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018B0CC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018B124[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018B16C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018B174[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018B17C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018B184[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018B12C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018B14C; +extern void func_801321B0(int param_1); +extern int D_8018B15C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E6D38; +extern s32 D_801E6D3C[]; +extern int D_801E6D40; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018B190; +extern u8 D_8018B18C; +extern s16 *D_8018B194; +extern u8 D_8018B198; +extern int D_801E6D38; +extern u16 D_801E6D48; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018B194; /* holds a pointer value (*(u16**)&D_8018B194) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018B1A8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018B1FC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018B200[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018B244; +extern u8 D_8018B288; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018B2CC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018B344, D_8018B346, D_8018B348, D_8018B34A, D_8018B34C, D_8018B34E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E6DB0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E6DB4; +extern s8 D_801E6DB5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E6DD4; +extern s32 D_801E6DC8; +extern s32 D_801E6DCC; +extern s32 D_801E6DD8; +extern void func_8013CABC(void); +extern s32 D_801E6DD0; +extern void func_8013CAE8(void); +extern s32 D_801E6E00; +extern s32 D_801E6E04; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E6DE0; +extern s32 D_801E6DE4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E87BE; +extern u8 D_801E8866; +extern u8 D_801E8692; +extern u8 D_801E876C; +extern u8 D_801E8670; +extern u8 D_801E8691; +extern s32 D_801E8774; +extern void func_8013D330(void); +extern void *D_801E6DB8; +extern void *D_801E6DBC; +extern void *D_801E6DC0; +extern s32 D_801E6DE8; +extern s32 D_801E6DEC; +extern s32 D_801E6DF0; +extern s32 D_801E86D4[]; +extern u8 D_8018B43C[]; +extern u8 D_8018B4E4[]; +extern u8 D_8018B394[]; +extern u8 D_8018B490[]; +extern u8 D_8018B510[]; +extern u8 D_8018B3E8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E6DC4; +extern s32 D_801E6DF4; +extern s32 D_801E6DF8; +extern s32 D_801E6DFC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E6DDC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018BF9C; +extern s32 D_80115188; +extern s16 D_8018BF74; +extern s16 D_8018BF76; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018BF78; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018BC54; +extern u8 *D_8018BC58; +extern u8 *D_8018BC5C; +extern u8 *D_8018BC60; +extern u8 *D_8018BC64; +extern u16 *D_8018BC68[]; +extern u16 *D_8018BC70[]; +extern u16 *D_8018BC90[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018BC54; + iVar2 = func_80028D58(); + puVar3 = D_8018BC68[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018BC58; + iVar2 = func_80028DE0(); + puVar3 = D_8018BC68[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018BC5C + 0x18) = *D_8018BC70[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018BC60 + 0x18) = *D_8018BC70[iVar2]; + + puVar1 = D_8018BC64; + iVar2 = func_80028D9C(); + puVar3 = D_8018BC90[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018BB90; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018BB90); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018BBA0; +extern char *D_8018BBC0; +extern char *D_8018BBC4; +extern char *D_8018BBC8; +extern char *D_8018BBCC; +extern char *D_8018BBD0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018BBA0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018BBC0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBC4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBC8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBCC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBD0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018BA5A; +extern unsigned short D_8018BA5E; +extern unsigned short D_8018BA62; +extern unsigned short D_8018BA66; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018BA5A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA5E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA62; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA66; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018BFF0[])(void); + +void func_80141788(void) +{ + D_8018BFF0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018BFFC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018BFFC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018BF74; +extern s16 D_8018BF76; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018BC14; + extern u8 D_8018BC2C; + extern u8 D_8018BCA0; + extern u8 D_8018BCA8; + extern void *D_801E6E10; + extern void *D_801E6E14; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E6E10 = &D_8018BC14; + D_801E6E14 = &D_8018BCA0; + } else { + D_801E6E10 = &D_8018BC2C; + D_801E6E14 = &D_8018BCA8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018BF74 = 0xE; + D_8018BF76 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018BF78: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018BF78; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018BF78); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018BF50; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018BF50 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018C020[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018C020[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018C030[])(void); + +void func_801425CC(void *a0) { + D_8018C030[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018C014; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018C014); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C044[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C044[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C060[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C060[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C230[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C230[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C2E8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C2E8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E6124; +extern u8 D_801E6E18; +extern u8 D_801E6E19; +extern u8 D_801E6E1A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E6124; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E6E18 = mul * (local.b[0] >> 4); + D_801E6E19 = mul * (local.b[1] >> 4); + D_801E6E1A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018C038; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C038); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C054[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C054); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018C220[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018C220[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C240[]; +extern unsigned char D_8018C2A0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C240); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018C2A0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E6120; +extern u8 D_801E6E18; +extern u8 D_801E6E1C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E6120, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E6E18); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E6E18, 0x10); + memcpy(&D_801E6E1C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018C3F8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018C3F8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018C520[])(void); + +void func_80143B30(void *a0) { + D_8018C520[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018C52C[])(void); + +void func_80143C38(void *a0) { + D_8018C52C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018C534[])(void); + +void func_80143C98(void *a0) { + D_8018C534[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80143D28); + + +extern void (*D_8018C57C[])(void); + +void func_80143E68(void *a0) { + D_8018C57C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018C590[])(void); + +void func_80144054(void *a0) { + D_8018C590[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018C598[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018C598[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018C514; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018C514, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018C528; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C528 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C528 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018C53C; +extern u8 D_8018C548; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C53C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C548); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018C514; +extern u8 D_8018C584; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018C514, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018C584, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018C5A0[])(void); + +void func_801449C8(void *a0) { + D_8018C5A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018C5A8[])(void); + +void func_80144A2C(void *a0) { + D_8018C5A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c b/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c index 9b5886767..9a7099834 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018BC54; -extern u8 *D_8018BC58; -extern u8 *D_8018BC5C; -extern u8 *D_8018BC60; -extern u8 *D_8018BC64; -extern u16 *D_8018BC68[]; -extern u16 *D_8018BC70[]; -extern u16 *D_8018BC90[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018BC54; - iVar2 = func_80028D58(); - puVar3 = D_8018BC68[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018BC58; - iVar2 = func_80028DE0(); - puVar3 = D_8018BC68[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018BC5C + 0x18) = *D_8018BC70[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018BC60 + 0x18) = *D_8018BC70[iVar2]; - - puVar1 = D_8018BC64; - iVar2 = func_80028D9C(); - puVar3 = D_8018BC90[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018BB90; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018BB90); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018BBA0; -extern char *D_8018BBC0; -extern char *D_8018BBC4; -extern char *D_8018BBC8; -extern char *D_8018BBCC; -extern char *D_8018BBD0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018BBA0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018BBC0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBC4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBC8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBCC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BBD0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018BA5A; -extern unsigned short D_8018BA5E; -extern unsigned short D_8018BA62; -extern unsigned short D_8018BA66; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018BA5A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA5E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA62; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA66; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018BFF0[])(void); - -void func_80141788(void) -{ - D_8018BFF0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018BFFC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018BFFC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018BF74; -extern s16 D_8018BF76; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018BC14; - extern u8 D_8018BC2C; - extern u8 D_8018BCA0; - extern u8 D_8018BCA8; - extern void *D_801E6E10; - extern void *D_801E6E14; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E6E10 = &D_8018BC14; - D_801E6E14 = &D_8018BCA0; - } else { - D_801E6E10 = &D_8018BC2C; - D_801E6E14 = &D_8018BCA8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018BF74 = 0xE; - D_8018BF76 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018BF78: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018BF78; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018BF78); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018BF50; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018BF50 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018C020[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018C020[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018C030[])(void); - -void func_801425CC(void *a0) { - D_8018C030[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018C014; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018C014); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C044[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C044[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C060[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C060[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C230[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C230[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C2E8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C2E8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E6124; -extern u8 D_801E6E18; -extern u8 D_801E6E19; -extern u8 D_801E6E1A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E6124; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E6E18 = mul * (local.b[0] >> 4); - D_801E6E19 = mul * (local.b[1] >> 4); - D_801E6E1A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018C038; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C038); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C054[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C054); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018C220[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018C220[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C240[]; -extern unsigned char D_8018C2A0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C240); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018C2A0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E6120; -extern u8 D_801E6E18; -extern u8 D_801E6E1C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E6120, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E6E18); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E6E18, 0x10); - memcpy(&D_801E6E1C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018C3F8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018C3F8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018C520[])(void); - -void func_80143B30(void *a0) { - D_8018C520[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018C52C[])(void); - -void func_80143C38(void *a0) { - D_8018C52C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018C534[])(void); - -void func_80143C98(void *a0) { - D_8018C534[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018C57C[])(void); - -void func_80143E68(void *a0) { - D_8018C57C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018C590[])(void); - -void func_80144054(void *a0) { - D_8018C590[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018C598[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018C598[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018C514; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018C514, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018C528; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C528 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C528 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018C53C; -extern u8 D_8018C548; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C53C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C548); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018C514; -extern u8 D_8018C584; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018C514, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018C584, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018C5A0[])(void); - -void func_801449C8(void *a0) { - D_8018C5A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018C5A8[])(void); - -void func_80144A2C(void *a0) { - D_8018C5A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_003/ov_SC02_003_jr_80140608.c b/src/ov_SC02_003/ov_SC02_003_jr_80140608.c new file mode 100644 index 000000000..db7c1a142 --- /dev/null +++ b/src/ov_SC02_003/ov_SC02_003_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E5794; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018AE94[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E6CCC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E87C0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E5794; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018ABD0)(); +extern s16 (*D_8018ABD4)(); +extern M2C_UNK (*D_8018ABDC)(); +extern s32 (*D_8018ABE0)(); +extern s32 D_801E6CC8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E5798; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018AF28; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018E40C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018AF40; +extern M2C_UNK D_8018AF48; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018AF50; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018AF6C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018AF78[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018AF8C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018AFDC[]; +extern s16 D_8018B00C[]; +extern s16 D_8018B06C[]; +extern s16 D_8018B074[]; +extern s16 D_8018B094[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018B0CC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018B124[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018B16C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018B174[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018B17C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018B184[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018B12C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018B14C; +extern void func_801321B0(int param_1); +extern int D_8018B15C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E6D38; +extern s32 D_801E6D3C[]; +extern int D_801E6D40; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018B190; +extern u8 D_8018B18C; +extern s16 *D_8018B194; +extern u8 D_8018B198; +extern int D_801E6D38; +extern u16 D_801E6D48; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018B194; /* holds a pointer value (*(u16**)&D_8018B194) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018B1A8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018B1FC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018B200[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018B244; +extern u8 D_8018B288; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018B2CC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018B344, D_8018B346, D_8018B348, D_8018B34A, D_8018B34C, D_8018B34E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E6DB0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E6DB4; +extern s8 D_801E6DB5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E6DD4; +extern s32 D_801E6DC8; +extern s32 D_801E6DCC; +extern s32 D_801E6DD8; +extern void func_8013CABC(void); +extern s32 D_801E6DD0; +extern void func_8013CAE8(void); +extern s32 D_801E6E00; +extern s32 D_801E6E04; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E6DE0; +extern s32 D_801E6DE4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E87BE; +extern u8 D_801E8866; +extern u8 D_801E8692; +extern u8 D_801E876C; +extern u8 D_801E8670; +extern u8 D_801E8691; +extern s32 D_801E8774; +extern void func_8013D330(void); +extern void *D_801E6DB8; +extern void *D_801E6DBC; +extern void *D_801E6DC0; +extern s32 D_801E6DE8; +extern s32 D_801E6DEC; +extern s32 D_801E6DF0; +extern s32 D_801E86D4[]; +extern u8 D_8018B43C[]; +extern u8 D_8018B4E4[]; +extern u8 D_8018B394[]; +extern u8 D_8018B490[]; +extern u8 D_8018B510[]; +extern u8 D_8018B3E8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E6DC4; +extern s32 D_801E6DF4; +extern s32 D_801E6DF8; +extern s32 D_801E6DFC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E6DDC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018BF9C; +extern s32 D_80115188; +extern s16 D_8018BF74; +extern s16 D_8018BF76; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018BF78; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018BC54; +extern u8 *D_8018BC58; +extern u8 *D_8018BC5C; +extern u8 *D_8018BC60; +extern u8 *D_8018BC64; +extern u16 *D_8018BC68[]; +extern u16 *D_8018BC70[]; +extern u16 *D_8018BC90[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018BC54; + iVar2 = func_80028D58(); + puVar3 = D_8018BC68[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018BC58; + iVar2 = func_80028DE0(); + puVar3 = D_8018BC68[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018BC5C + 0x18) = *D_8018BC70[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018BC60 + 0x18) = *D_8018BC70[iVar2]; + + puVar1 = D_8018BC64; + iVar2 = func_80028D9C(); + puVar3 = D_8018BC90[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018BB90; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018BB90); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018BBA0; +extern char *D_8018BBC0; +extern char *D_8018BBC4; +extern char *D_8018BBC8; +extern char *D_8018BBCC; +extern char *D_8018BBD0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018BBA0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018BBC0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBC4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBC8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBCC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BBD0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018BA5A; +extern unsigned short D_8018BA5E; +extern unsigned short D_8018BA62; +extern unsigned short D_8018BA66; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018BA5A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA5E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA62; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA66; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018BFF0[])(void); + +void func_80141788(void) +{ + D_8018BFF0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018BFFC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018BFFC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018BF74; +extern s16 D_8018BF76; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018BC14; + extern u8 D_8018BC2C; + extern u8 D_8018BCA0; + extern u8 D_8018BCA8; + extern void *D_801E6E10; + extern void *D_801E6E14; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E6E10 = &D_8018BC14; + D_801E6E14 = &D_8018BCA0; + } else { + D_801E6E10 = &D_8018BC2C; + D_801E6E14 = &D_8018BCA8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018BF74 = 0xE; + D_8018BF76 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018BF78: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018BF78; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018BF78); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018BF50; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018BF50 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018C020[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018C020[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018C030[])(void); + +void func_801425CC(void *a0) { + D_8018C030[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018C014; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018C014); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C044[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C044[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C060[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C060[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C230[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C230[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C2E8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C2E8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E6124; +extern u8 D_801E6E18; +extern u8 D_801E6E19; +extern u8 D_801E6E1A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E6124; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E6E18 = mul * (local.b[0] >> 4); + D_801E6E19 = mul * (local.b[1] >> 4); + D_801E6E1A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018C038; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C038); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C054[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C054); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018C220[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018C220[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C240[]; +extern unsigned char D_8018C2A0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C240); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018C2A0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E6120; +extern u8 D_801E6E18; +extern u8 D_801E6E1C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E6120, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E6E18); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E6E18, 0x10); + memcpy(&D_801E6E1C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018C3F8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018C3F8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018C520[])(void); + +void func_80143B30(void *a0) { + D_8018C520[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018C52C[])(void); + +void func_80143C38(void *a0) { + D_8018C52C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018C534[])(void); + +void func_80143C98(void *a0) { + D_8018C534[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80143D28); + + +extern void (*D_8018C57C[])(void); + +void func_80143E68(void *a0) { + D_8018C57C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018C590[])(void); + +void func_80144054(void *a0) { + D_8018C590[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018C598[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018C598[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018C514; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018C514, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018C528; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C528 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C528 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018C53C; +extern u8 D_8018C548; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C53C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C548); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018C514; +extern u8 D_8018C584; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018C514, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018C584, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018C5A0[])(void); + +void func_801449C8(void *a0) { + D_8018C5A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018C5A8[])(void); + +void func_80144A2C(void *a0) { + D_8018C5A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c b/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c index 7a24eb8da..65bf6560e 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017ED34; -extern u8 *D_8017ED38; -extern u8 *D_8017ED3C; -extern u8 *D_8017ED40; -extern u8 *D_8017ED44; -extern u16 *D_8017ED48[]; -extern u16 *D_8017ED50[]; -extern u16 *D_8017ED70[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017ED34; - iVar2 = func_80028D58(); - puVar3 = D_8017ED48[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017ED38; - iVar2 = func_80028DE0(); - puVar3 = D_8017ED48[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017ED3C + 0x18) = *D_8017ED50[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017ED40 + 0x18) = *D_8017ED50[iVar2]; - - puVar1 = D_8017ED44; - iVar2 = func_80028D9C(); - puVar3 = D_8017ED70[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017EC70; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017EC70); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017EC80; -extern char *D_8017ECA0; -extern char *D_8017ECA4; -extern char *D_8017ECA8; -extern char *D_8017ECAC; -extern char *D_8017ECB0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017EC80); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017ECA0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECA4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECA8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECAC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECB0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017EB3A; -extern unsigned short D_8017EB3E; -extern unsigned short D_8017EB42; -extern unsigned short D_8017EB46; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017EB3A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EB3E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EB42; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EB46; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F0D0[])(void); - -void func_80141788(void) -{ - D_8017F0D0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F0DC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F0DC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F054; -extern s16 D_8017F056; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017ECF4; - extern u8 D_8017ED0C; - extern u8 D_8017ED80; - extern u8 D_8017ED88; - extern void *D_80195060; - extern void *D_80195064; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80195060 = &D_8017ECF4; - D_80195064 = &D_8017ED80; - } else { - D_80195060 = &D_8017ED0C; - D_80195064 = &D_8017ED88; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F054 = 0xE; - D_8017F056 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F058: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F058; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F058); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F030; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F030 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F100[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F100[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F110[])(void); - -void func_801425CC(void *a0) { - D_8017F110[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F0F4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F0F4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F124[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F124[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F140[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F140[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F310[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F310[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F3C8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F3C8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80194734; -extern u8 D_80195068; -extern u8 D_80195069; -extern u8 D_8019506A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80194734; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80195068 = mul * (local.b[0] >> 4); - D_80195069 = mul * (local.b[1] >> 4); - D_8019506A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F118; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F118); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F134[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F134); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F300[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F300[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F320[]; -extern unsigned char D_8017F380[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F320); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F380); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80194730; -extern u8 D_80195068; -extern u8 D_8019506C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80194730, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80195068); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80195068, 0x10); - memcpy(&D_8019506C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017F4D8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017F4D8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017F600[])(void); - -void func_80143B30(void *a0) { - D_8017F600[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017F60C[])(void); - -void func_80143C38(void *a0) { - D_8017F60C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017F614[])(void); - -void func_80143C98(void *a0) { - D_8017F614[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017F65C[])(void); - -void func_80143E68(void *a0) { - D_8017F65C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017F670[])(void); - -void func_80144054(void *a0) { - D_8017F670[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017F678[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017F678[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017F5F4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017F5F4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017F608; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F608 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F608 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017F61C; -extern u8 D_8017F628; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F61C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F628); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017F5F4; -extern u8 D_8017F664; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017F5F4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017F664, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017F680[])(void); - -void func_801449C8(void *a0) { - D_8017F680[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017F688[])(void); - -void func_80144A2C(void *a0) { - D_8017F688[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_004/ov_SC02_004_jr_80140608.c b/src/ov_SC02_004/ov_SC02_004_jr_80140608.c new file mode 100644 index 000000000..23efff080 --- /dev/null +++ b/src/ov_SC02_004/ov_SC02_004_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80193DA4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017DF74[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80194F1C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80196358; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80193DA4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017DCB0)(); +extern s16 (*D_8017DCB4)(); +extern M2C_UNK (*D_8017DCBC)(); +extern s32 (*D_8017DCC0)(); +extern s32 D_80194F18; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80193DA8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E008; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801814EC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E020; +extern M2C_UNK D_8017E028; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E030; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E04C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E058[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E06C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E0BC[]; +extern s16 D_8017E0EC[]; +extern s16 D_8017E14C[]; +extern s16 D_8017E154[]; +extern s16 D_8017E174[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E1AC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E204[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E24C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E254[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E25C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E264[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E20C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E22C; +extern void func_801321B0(int param_1); +extern int D_8017E23C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80194F88; +extern s32 D_80194F8C[]; +extern int D_80194F90; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E270; +extern u8 D_8017E26C; +extern s16 *D_8017E274; +extern u8 D_8017E278; +extern int D_80194F88; +extern u16 D_80194F98; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E274; /* holds a pointer value (*(u16**)&D_8017E274) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E288[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E2DC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E2E0[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E324; +extern u8 D_8017E368; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E3AC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E424, D_8017E426, D_8017E428, D_8017E42A, D_8017E42C, D_8017E42E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80195000; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80195004; +extern s8 D_80195005; +extern void func_8013C9C4(void * arg0); +extern s32 D_80195024; +extern s32 D_80195018; +extern s32 D_8019501C; +extern s32 D_80195028; +extern void func_8013CABC(void); +extern s32 D_80195020; +extern void func_8013CAE8(void); +extern s32 D_80195050; +extern s32 D_80195054; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80195030; +extern s32 D_80195034; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_80196352; +extern u8 D_801963C6; +extern u8 D_8019627A; +extern u8 D_80196334; +extern u8 D_80196258; +extern u8 D_80196279; +extern s32 D_80196338; +extern void func_8013D330(void); +extern void *D_80195008; +extern void *D_8019500C; +extern void *D_80195010; +extern s32 D_80195038; +extern s32 D_8019503C; +extern s32 D_80195040; +extern s32 D_801962AC[]; +extern u8 D_8017E51C[]; +extern u8 D_8017E5C4[]; +extern u8 D_8017E474[]; +extern u8 D_8017E570[]; +extern u8 D_8017E5F0[]; +extern u8 D_8017E4C8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80195014; +extern s32 D_80195044; +extern s32 D_80195048; +extern s32 D_8019504C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019502C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F07C; +extern s32 D_80115188; +extern s16 D_8017F054; +extern s16 D_8017F056; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F058; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017ED34; +extern u8 *D_8017ED38; +extern u8 *D_8017ED3C; +extern u8 *D_8017ED40; +extern u8 *D_8017ED44; +extern u16 *D_8017ED48[]; +extern u16 *D_8017ED50[]; +extern u16 *D_8017ED70[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017ED34; + iVar2 = func_80028D58(); + puVar3 = D_8017ED48[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017ED38; + iVar2 = func_80028DE0(); + puVar3 = D_8017ED48[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017ED3C + 0x18) = *D_8017ED50[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017ED40 + 0x18) = *D_8017ED50[iVar2]; + + puVar1 = D_8017ED44; + iVar2 = func_80028D9C(); + puVar3 = D_8017ED70[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017EC70; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017EC70); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017EC80; +extern char *D_8017ECA0; +extern char *D_8017ECA4; +extern char *D_8017ECA8; +extern char *D_8017ECAC; +extern char *D_8017ECB0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017EC80); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017ECA0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECA4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECA8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECAC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECB0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017EB3A; +extern unsigned short D_8017EB3E; +extern unsigned short D_8017EB42; +extern unsigned short D_8017EB46; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017EB3A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EB3E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EB42; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EB46; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F0D0[])(void); + +void func_80141788(void) +{ + D_8017F0D0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F0DC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F0DC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F054; +extern s16 D_8017F056; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017ECF4; + extern u8 D_8017ED0C; + extern u8 D_8017ED80; + extern u8 D_8017ED88; + extern void *D_80195060; + extern void *D_80195064; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80195060 = &D_8017ECF4; + D_80195064 = &D_8017ED80; + } else { + D_80195060 = &D_8017ED0C; + D_80195064 = &D_8017ED88; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F054 = 0xE; + D_8017F056 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F058: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F058; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F058); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F030; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F030 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F100[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F100[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F110[])(void); + +void func_801425CC(void *a0) { + D_8017F110[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F0F4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F0F4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F124[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F124[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F140[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F140[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F310[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F310[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F3C8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F3C8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80194734; +extern u8 D_80195068; +extern u8 D_80195069; +extern u8 D_8019506A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80194734; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80195068 = mul * (local.b[0] >> 4); + D_80195069 = mul * (local.b[1] >> 4); + D_8019506A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F118; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F118); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F134[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F134); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F300[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F300[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F320[]; +extern unsigned char D_8017F380[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F320); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F380); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80194730; +extern u8 D_80195068; +extern u8 D_8019506C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80194730, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80195068); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80195068, 0x10); + memcpy(&D_8019506C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017F4D8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017F4D8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017F600[])(void); + +void func_80143B30(void *a0) { + D_8017F600[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017F60C[])(void); + +void func_80143C38(void *a0) { + D_8017F60C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017F614[])(void); + +void func_80143C98(void *a0) { + D_8017F614[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80143D28); + + +extern void (*D_8017F65C[])(void); + +void func_80143E68(void *a0) { + D_8017F65C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017F670[])(void); + +void func_80144054(void *a0) { + D_8017F670[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017F678[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017F678[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017F5F4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017F5F4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017F608; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F608 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F608 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017F61C; +extern u8 D_8017F628; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F61C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F628); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017F5F4; +extern u8 D_8017F664; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017F5F4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017F664, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017F680[])(void); + +void func_801449C8(void *a0) { + D_8017F680[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017F688[])(void); + +void func_80144A2C(void *a0) { + D_8017F688[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c b/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c index fd9174daf..c77799985 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80191938; -extern u8 *D_8019193C; -extern u8 *D_80191940; -extern u8 *D_80191944; -extern u8 *D_80191948; -extern u16 *D_8019194C[]; -extern u16 *D_80191954[]; -extern u16 *D_80191974[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80191938; - iVar2 = func_80028D58(); - puVar3 = D_8019194C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8019193C; - iVar2 = func_80028DE0(); - puVar3 = D_8019194C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80191940 + 0x18) = *D_80191954[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80191944 + 0x18) = *D_80191954[iVar2]; - - puVar1 = D_80191948; - iVar2 = func_80028D9C(); - puVar3 = D_80191974[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80191874; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80191874); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80191884; -extern char *D_801918A4; -extern char *D_801918A8; -extern char *D_801918AC; -extern char *D_801918B0; -extern char *D_801918B4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80191884); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801918A4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801918A8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801918AC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801918B0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801918B4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8019173E; -extern unsigned short D_80191742; -extern unsigned short D_80191746; -extern unsigned short D_8019174A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8019173E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80191742; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80191746; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019174A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80191CD4[])(void); - -void func_80141788(void) -{ - D_80191CD4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80191CE0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80191CE0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80191C58; -extern s16 D_80191C5A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801918F8; - extern u8 D_80191910; - extern u8 D_80191984; - extern u8 D_8019198C; - extern void *D_801E30D8; - extern void *D_801E30DC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E30D8 = &D_801918F8; - D_801E30DC = &D_80191984; - } else { - D_801E30D8 = &D_80191910; - D_801E30DC = &D_8019198C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80191C58 = 0xE; - D_80191C5A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80191C5C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80191C5C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80191C5C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80191C34; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80191C34 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80191D04[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80191D04[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80191D14[])(void); - -void func_801425CC(void *a0) { - D_80191D14[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80191CF8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80191CF8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191D28[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191D28[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191D44[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191D44[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191F14[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191F14[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191FCC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191FCC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E2468; -extern u8 D_801E30E0; -extern u8 D_801E30E1; -extern u8 D_801E30E2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E2468; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E30E0 = mul * (local.b[0] >> 4); - D_801E30E1 = mul * (local.b[1] >> 4); - D_801E30E2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80191D1C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80191D1C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80191D38[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80191D38); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80191F04[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80191F04[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80191F24[]; -extern unsigned char D_80191F84[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80191F24); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80191F84); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E2464; -extern u8 D_801E30E0; -extern u8 D_801E30E4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E2464, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E30E0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E30E0, 0x10); - memcpy(&D_801E30E4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801920DC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801920DC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80192204[])(void); - -void func_80143B30(void *a0) { - D_80192204[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80192210[])(void); - -void func_80143C38(void *a0) { - D_80192210[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80192218[])(void); - -void func_80143C98(void *a0) { - D_80192218[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80143D28); - - -extern void (*D_80192260[])(void); - -void func_80143E68(void *a0) { - D_80192260[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80192274[])(void); - -void func_80144054(void *a0) { - D_80192274[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8019227C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8019227C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801921F8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801921F8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8019220C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8019220C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8019220C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80192220; -extern u8 D_8019222C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80192220); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8019222C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801921F8; -extern u8 D_80192268; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801921F8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80192268, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80192284[])(void); - -void func_801449C8(void *a0) { - D_80192284[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8019228C[])(void); - -void func_80144A2C(void *a0) { - D_8019228C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_005/ov_SC02_005_jr_80140608.c b/src/ov_SC02_005/ov_SC02_005_jr_80140608.c new file mode 100644 index 000000000..020bacaf9 --- /dev/null +++ b/src/ov_SC02_005/ov_SC02_005_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E1AD8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80190B78[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E2F94; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E4BE0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E1AD8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801908B4)(); +extern s16 (*D_801908B8)(); +extern M2C_UNK (*D_801908C0)(); +extern s32 (*D_801908C4)(); +extern s32 D_801E2F90; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E1ADC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80190C0C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801940F0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80190C24; +extern M2C_UNK D_80190C2C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80190C34; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80190C50[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80190C5C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80190C70[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80190CC0[]; +extern s16 D_80190CF0[]; +extern s16 D_80190D50[]; +extern s16 D_80190D58[]; +extern s16 D_80190D78[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80190DB0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80190E08[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80190E50[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80190E58[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80190E60[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80190E68[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80190E10; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80190E30; +extern void func_801321B0(int param_1); +extern int D_80190E40; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E3000; +extern s32 D_801E3004[]; +extern int D_801E3008; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80190E74; +extern u8 D_80190E70; +extern s16 *D_80190E78; +extern u8 D_80190E7C; +extern int D_801E3000; +extern u16 D_801E3010; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80190E78; /* holds a pointer value (*(u16**)&D_80190E78) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80190E8C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80190EE0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80190EE4[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80190F28; +extern u8 D_80190F6C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80190FB0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80191028, D_8019102A, D_8019102C, D_8019102E, D_80191030, D_80191032; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E3078; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E307C; +extern s8 D_801E307D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E309C; +extern s32 D_801E3090; +extern s32 D_801E3094; +extern s32 D_801E30A0; +extern void func_8013CABC(void); +extern s32 D_801E3098; +extern void func_8013CAE8(void); +extern s32 D_801E30C8; +extern s32 D_801E30CC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E30A8; +extern s32 D_801E30AC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E4BDA; +extern u8 D_801E4C58; +extern u8 D_801E4B00; +extern u8 D_801E4BBE; +extern u8 D_801E4A40; +extern u8 D_801E4A99; +extern s32 D_801E4BC0; +extern void func_8013D330(void); +extern void *D_801E3080; +extern void *D_801E3084; +extern void *D_801E3088; +extern s32 D_801E30B0; +extern s32 D_801E30B4; +extern s32 D_801E30B8; +extern s32 D_801E4B34[]; +extern u8 D_80191120[]; +extern u8 D_801911C8[]; +extern u8 D_80191078[]; +extern u8 D_80191174[]; +extern u8 D_801911F4[]; +extern u8 D_801910CC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E308C; +extern s32 D_801E30BC; +extern s32 D_801E30C0; +extern s32 D_801E30C4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E30A4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80191C80; +extern s32 D_80115188; +extern s16 D_80191C58; +extern s16 D_80191C5A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80191C5C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80191938; +extern u8 *D_8019193C; +extern u8 *D_80191940; +extern u8 *D_80191944; +extern u8 *D_80191948; +extern u16 *D_8019194C[]; +extern u16 *D_80191954[]; +extern u16 *D_80191974[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80191938; + iVar2 = func_80028D58(); + puVar3 = D_8019194C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8019193C; + iVar2 = func_80028DE0(); + puVar3 = D_8019194C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80191940 + 0x18) = *D_80191954[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80191944 + 0x18) = *D_80191954[iVar2]; + + puVar1 = D_80191948; + iVar2 = func_80028D9C(); + puVar3 = D_80191974[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80191874; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80191874); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80191884; +extern char *D_801918A4; +extern char *D_801918A8; +extern char *D_801918AC; +extern char *D_801918B0; +extern char *D_801918B4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80191884); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801918A4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801918A8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801918AC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801918B0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801918B4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8019173E; +extern unsigned short D_80191742; +extern unsigned short D_80191746; +extern unsigned short D_8019174A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8019173E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80191742; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80191746; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019174A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80191CD4[])(void); + +void func_80141788(void) +{ + D_80191CD4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80191CE0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80191CE0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80191C58; +extern s16 D_80191C5A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801918F8; + extern u8 D_80191910; + extern u8 D_80191984; + extern u8 D_8019198C; + extern void *D_801E30D8; + extern void *D_801E30DC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E30D8 = &D_801918F8; + D_801E30DC = &D_80191984; + } else { + D_801E30D8 = &D_80191910; + D_801E30DC = &D_8019198C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80191C58 = 0xE; + D_80191C5A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80191C5C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80191C5C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80191C5C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80191C34; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80191C34 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80191D04[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80191D04[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80191D14[])(void); + +void func_801425CC(void *a0) { + D_80191D14[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80191CF8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80191CF8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191D28[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191D28[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191D44[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191D44[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191F14[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191F14[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191FCC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191FCC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E2468; +extern u8 D_801E30E0; +extern u8 D_801E30E1; +extern u8 D_801E30E2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E2468; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E30E0 = mul * (local.b[0] >> 4); + D_801E30E1 = mul * (local.b[1] >> 4); + D_801E30E2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80191D1C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80191D1C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80191D38[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80191D38); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80191F04[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80191F04[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80191F24[]; +extern unsigned char D_80191F84[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80191F24); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80191F84); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E2464; +extern u8 D_801E30E0; +extern u8 D_801E30E4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E2464, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E30E0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E30E0, 0x10); + memcpy(&D_801E30E4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801920DC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801920DC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80192204[])(void); + +void func_80143B30(void *a0) { + D_80192204[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80192210[])(void); + +void func_80143C38(void *a0) { + D_80192210[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80192218[])(void); + +void func_80143C98(void *a0) { + D_80192218[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80143D28); + + +extern void (*D_80192260[])(void); + +void func_80143E68(void *a0) { + D_80192260[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80192274[])(void); + +void func_80144054(void *a0) { + D_80192274[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8019227C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8019227C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801921F8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801921F8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8019220C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8019220C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8019220C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80192220; +extern u8 D_8019222C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80192220); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8019222C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801921F8; +extern u8 D_80192268; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801921F8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80192268, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80192284[])(void); + +void func_801449C8(void *a0) { + D_80192284[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8019228C[])(void); + +void func_80144A2C(void *a0) { + D_8019228C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c b/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c index 526228d61..4daeab596 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80191D88; -extern u8 *D_80191D8C; -extern u8 *D_80191D90; -extern u8 *D_80191D94; -extern u8 *D_80191D98; -extern u16 *D_80191D9C[]; -extern u16 *D_80191DA4[]; -extern u16 *D_80191DC4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80191D88; - iVar2 = func_80028D58(); - puVar3 = D_80191D9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80191D8C; - iVar2 = func_80028DE0(); - puVar3 = D_80191D9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80191D90 + 0x18) = *D_80191DA4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80191D94 + 0x18) = *D_80191DA4[iVar2]; - - puVar1 = D_80191D98; - iVar2 = func_80028D9C(); - puVar3 = D_80191DC4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80191CC4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80191CC4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80191CD4; -extern char *D_80191CF4; -extern char *D_80191CF8; -extern char *D_80191CFC; -extern char *D_80191D00; -extern char *D_80191D04; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80191CD4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80191CF4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80191CF8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80191CFC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80191D00; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80191D04; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80191B8E; -extern unsigned short D_80191B92; -extern unsigned short D_80191B96; -extern unsigned short D_80191B9A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80191B8E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80191B92; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80191B96; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80191B9A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80192124[])(void); - -void func_80141788(void) -{ - D_80192124[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80192130[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80192130[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801920A8; -extern s16 D_801920AA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80191D48; - extern u8 D_80191D60; - extern u8 D_80191DD4; - extern u8 D_80191DDC; - extern void *D_801E9FB8; - extern void *D_801E9FBC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E9FB8 = &D_80191D48; - D_801E9FBC = &D_80191DD4; - } else { - D_801E9FB8 = &D_80191D60; - D_801E9FBC = &D_80191DDC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801920A8 = 0xE; - D_801920AA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801920AC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801920AC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801920AC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80192084; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80192084 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80192154[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80192154[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80192164[])(void); - -void func_801425CC(void *a0) { - D_80192164[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80192148; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80192148); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80192178[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80192178[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80192194[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80192194[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80192364[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80192364[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8019241C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8019241C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E95C4; -extern u8 D_801E9FC0; -extern u8 D_801E9FC1; -extern u8 D_801E9FC2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E95C4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E9FC0 = mul * (local.b[0] >> 4); - D_801E9FC1 = mul * (local.b[1] >> 4); - D_801E9FC2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8019216C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8019216C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80192188[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80192188); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80192354[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80192354[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80192374[]; -extern unsigned char D_801923D4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80192374); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801923D4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E95C0; -extern u8 D_801E9FC0; -extern u8 D_801E9FC4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E95C0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E9FC0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E9FC0, 0x10); - memcpy(&D_801E9FC4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8019252C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8019252C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80192654[])(void); - -void func_80143B30(void *a0) { - D_80192654[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80192660[])(void); - -void func_80143C38(void *a0) { - D_80192660[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80192668[])(void); - -void func_80143C98(void *a0) { - D_80192668[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80143D28); - - -extern void (*D_801926B0[])(void); - -void func_80143E68(void *a0) { - D_801926B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801926C4[])(void); - -void func_80144054(void *a0) { - D_801926C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801926CC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801926CC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80192648; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80192648, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8019265C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8019265C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8019265C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80192670; -extern u8 D_8019267C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80192670); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8019267C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80192648; -extern u8 D_801926B8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80192648, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801926B8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801926D4[])(void); - -void func_801449C8(void *a0) { - D_801926D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801926DC[])(void); - -void func_80144A2C(void *a0) { - D_801926DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_011/ov_SC02_011_jr_80140608.c b/src/ov_SC02_011/ov_SC02_011_jr_80140608.c new file mode 100644 index 000000000..80934e758 --- /dev/null +++ b/src/ov_SC02_011/ov_SC02_011_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E8C34; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80190FC8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E9E74; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801EBA10; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E8C34; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80190D04)(); +extern s16 (*D_80190D08)(); +extern M2C_UNK (*D_80190D10)(); +extern s32 (*D_80190D14)(); +extern s32 D_801E9E70; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E8C38; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8019105C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80194540; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80191074; +extern M2C_UNK D_8019107C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80191084; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801910A0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801910AC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801910C0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80191110[]; +extern s16 D_80191140[]; +extern s16 D_801911A0[]; +extern s16 D_801911A8[]; +extern s16 D_801911C8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80191200[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80191258[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801912A0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801912A8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801912B0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801912B8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80191260; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80191280; +extern void func_801321B0(int param_1); +extern int D_80191290; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E9EE0; +extern s32 D_801E9EE4[]; +extern int D_801E9EE8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801912C4; +extern u8 D_801912C0; +extern s16 *D_801912C8; +extern u8 D_801912CC; +extern int D_801E9EE0; +extern u16 D_801E9EF0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801912C8; /* holds a pointer value (*(u16**)&D_801912C8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801912DC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80191330; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80191334[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80191378; +extern u8 D_801913BC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80191400[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80191478, D_8019147A, D_8019147C, D_8019147E, D_80191480, D_80191482; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E9F58; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E9F5C; +extern s8 D_801E9F5D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E9F7C; +extern s32 D_801E9F70; +extern s32 D_801E9F74; +extern s32 D_801E9F80; +extern void func_8013CABC(void); +extern s32 D_801E9F78; +extern void func_8013CAE8(void); +extern s32 D_801E9FA8; +extern s32 D_801E9FAC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E9F88; +extern s32 D_801E9F8C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801EBA0A; +extern u8 D_801EBA7E; +extern u8 D_801EB932; +extern u8 D_801EB9EC; +extern u8 D_801EB910; +extern u8 D_801EB931; +extern s32 D_801EB9F0; +extern void func_8013D330(void); +extern void *D_801E9F60; +extern void *D_801E9F64; +extern void *D_801E9F68; +extern s32 D_801E9F90; +extern s32 D_801E9F94; +extern s32 D_801E9F98; +extern s32 D_801EB964[]; +extern u8 D_80191570[]; +extern u8 D_80191618[]; +extern u8 D_801914C8[]; +extern u8 D_801915C4[]; +extern u8 D_80191644[]; +extern u8 D_8019151C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E9F6C; +extern s32 D_801E9F9C; +extern s32 D_801E9FA0; +extern s32 D_801E9FA4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E9F84; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801920D0; +extern s32 D_80115188; +extern s16 D_801920A8; +extern s16 D_801920AA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801920AC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80191D88; +extern u8 *D_80191D8C; +extern u8 *D_80191D90; +extern u8 *D_80191D94; +extern u8 *D_80191D98; +extern u16 *D_80191D9C[]; +extern u16 *D_80191DA4[]; +extern u16 *D_80191DC4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80191D88; + iVar2 = func_80028D58(); + puVar3 = D_80191D9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80191D8C; + iVar2 = func_80028DE0(); + puVar3 = D_80191D9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80191D90 + 0x18) = *D_80191DA4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80191D94 + 0x18) = *D_80191DA4[iVar2]; + + puVar1 = D_80191D98; + iVar2 = func_80028D9C(); + puVar3 = D_80191DC4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80191CC4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80191CC4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80191CD4; +extern char *D_80191CF4; +extern char *D_80191CF8; +extern char *D_80191CFC; +extern char *D_80191D00; +extern char *D_80191D04; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80191CD4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80191CF4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80191CF8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80191CFC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80191D00; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80191D04; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80191B8E; +extern unsigned short D_80191B92; +extern unsigned short D_80191B96; +extern unsigned short D_80191B9A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80191B8E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80191B92; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80191B96; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80191B9A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80192124[])(void); + +void func_80141788(void) +{ + D_80192124[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80192130[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80192130[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801920A8; +extern s16 D_801920AA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80191D48; + extern u8 D_80191D60; + extern u8 D_80191DD4; + extern u8 D_80191DDC; + extern void *D_801E9FB8; + extern void *D_801E9FBC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E9FB8 = &D_80191D48; + D_801E9FBC = &D_80191DD4; + } else { + D_801E9FB8 = &D_80191D60; + D_801E9FBC = &D_80191DDC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801920A8 = 0xE; + D_801920AA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801920AC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801920AC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801920AC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80192084; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80192084 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80192154[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80192154[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80192164[])(void); + +void func_801425CC(void *a0) { + D_80192164[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80192148; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80192148); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80192178[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80192178[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80192194[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80192194[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80192364[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80192364[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8019241C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8019241C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E95C4; +extern u8 D_801E9FC0; +extern u8 D_801E9FC1; +extern u8 D_801E9FC2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E95C4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E9FC0 = mul * (local.b[0] >> 4); + D_801E9FC1 = mul * (local.b[1] >> 4); + D_801E9FC2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8019216C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8019216C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80192188[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80192188); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80192354[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80192354[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80192374[]; +extern unsigned char D_801923D4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80192374); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801923D4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E95C0; +extern u8 D_801E9FC0; +extern u8 D_801E9FC4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E95C0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E9FC0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E9FC0, 0x10); + memcpy(&D_801E9FC4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8019252C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8019252C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80192654[])(void); + +void func_80143B30(void *a0) { + D_80192654[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80192660[])(void); + +void func_80143C38(void *a0) { + D_80192660[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80192668[])(void); + +void func_80143C98(void *a0) { + D_80192668[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80143D28); + + +extern void (*D_801926B0[])(void); + +void func_80143E68(void *a0) { + D_801926B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801926C4[])(void); + +void func_80144054(void *a0) { + D_801926C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801926CC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801926CC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80192648; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80192648, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8019265C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8019265C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8019265C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80192670; +extern u8 D_8019267C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80192670); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8019267C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80192648; +extern u8 D_801926B8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80192648, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801926B8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801926D4[])(void); + +void func_801449C8(void *a0) { + D_801926D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801926DC[])(void); + +void func_80144A2C(void *a0) { + D_801926DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c b/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c index d20ecd816..8a6820142 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F29C; -extern u8 *D_8017F2A0; -extern u8 *D_8017F2A4; -extern u8 *D_8017F2A8; -extern u8 *D_8017F2AC; -extern u16 *D_8017F2B0[]; -extern u16 *D_8017F2B8[]; -extern u16 *D_8017F2D8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F29C; - iVar2 = func_80028D58(); - puVar3 = D_8017F2B0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F2A0; - iVar2 = func_80028DE0(); - puVar3 = D_8017F2B0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F2A4 + 0x18) = *D_8017F2B8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F2A8 + 0x18) = *D_8017F2B8[iVar2]; - - puVar1 = D_8017F2AC; - iVar2 = func_80028D9C(); - puVar3 = D_8017F2D8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F1D8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F1D8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F1E8; -extern char *D_8017F208; -extern char *D_8017F20C; -extern char *D_8017F210; -extern char *D_8017F214; -extern char *D_8017F218; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F1E8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F208; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F20C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F210; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F214; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F218; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F0A2; -extern unsigned short D_8017F0A6; -extern unsigned short D_8017F0AA; -extern unsigned short D_8017F0AE; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F0A2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F0A6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F0AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F0AE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F638[])(void); - -void func_80141788(void) -{ - D_8017F638[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F644[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F644[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F5BC; -extern s16 D_8017F5BE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F25C; - extern u8 D_8017F274; - extern u8 D_8017F2E8; - extern u8 D_8017F2F0; - extern void *D_8018F138; - extern void *D_8018F13C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018F138 = &D_8017F25C; - D_8018F13C = &D_8017F2E8; - } else { - D_8018F138 = &D_8017F274; - D_8018F13C = &D_8017F2F0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F5BC = 0xE; - D_8017F5BE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F5C0: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F5C0; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F5C0); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F598; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F598 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F668[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F668[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F678[])(void); - -void func_801425CC(void *a0) { - D_8017F678[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F65C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F65C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F68C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F68C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F6A8[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F6A8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F878[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F878[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F930[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F930[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018E81C; -extern u8 D_8018F140; -extern u8 D_8018F141; -extern u8 D_8018F142; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018E81C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018F140 = mul * (local.b[0] >> 4); - D_8018F141 = mul * (local.b[1] >> 4); - D_8018F142 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F680; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F680); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F69C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F69C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F868[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F868[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F888[]; -extern unsigned char D_8017F8E8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F888); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F8E8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018E818; -extern u8 D_8018F140; -extern u8 D_8018F144; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018E818, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018F140); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018F140, 0x10); - memcpy(&D_8018F144, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017FA40[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017FA40[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017FB68[])(void); - -void func_80143B30(void *a0) { - D_8017FB68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017FB74[])(void); - -void func_80143C38(void *a0) { - D_8017FB74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017FB7C[])(void); - -void func_80143C98(void *a0) { - D_8017FB7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017FBC4[])(void); - -void func_80143E68(void *a0) { - D_8017FBC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017FBD8[])(void); - -void func_80144054(void *a0) { - D_8017FBD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017FBE0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017FBE0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017FB5C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FB5C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017FB70; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FB70 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FB70 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017FB84; -extern u8 D_8017FB90; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FB84); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FB90); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017FB5C; -extern u8 D_8017FBCC; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FB5C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017FBCC, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017FBE8[])(void); - -void func_801449C8(void *a0) { - D_8017FBE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017FBF0[])(void); - -void func_80144A2C(void *a0) { - D_8017FBF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_015/ov_SC02_015_jr_80140608.c b/src/ov_SC02_015/ov_SC02_015_jr_80140608.c new file mode 100644 index 000000000..54ee9a0f1 --- /dev/null +++ b/src/ov_SC02_015/ov_SC02_015_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018DE8C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E4DC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018EFF4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80190630; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018DE8C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017E218)(); +extern s16 (*D_8017E21C)(); +extern M2C_UNK (*D_8017E224)(); +extern s32 (*D_8017E228)(); +extern s32 D_8018EFF0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018DE90; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E570; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80181A54; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E588; +extern M2C_UNK D_8017E590; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E598; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E5B4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E5C0[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E5D4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E624[]; +extern s16 D_8017E654[]; +extern s16 D_8017E6B4[]; +extern s16 D_8017E6BC[]; +extern s16 D_8017E6DC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E714[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E76C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E7B4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E7BC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E7C4[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E7CC[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E774; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E794; +extern void func_801321B0(int param_1); +extern int D_8017E7A4; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018F060; +extern s32 D_8018F064[]; +extern int D_8018F068; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E7D8; +extern u8 D_8017E7D4; +extern s16 *D_8017E7DC; +extern u8 D_8017E7E0; +extern int D_8018F060; +extern u16 D_8018F070; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E7DC; /* holds a pointer value (*(u16**)&D_8017E7DC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E7F0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E844; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E848[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E88C; +extern u8 D_8017E8D0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E914[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E98C, D_8017E98E, D_8017E990, D_8017E992, D_8017E994, D_8017E996; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018F0D8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018F0DC; +extern s8 D_8018F0DD; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018F0FC; +extern s32 D_8018F0F0; +extern s32 D_8018F0F4; +extern s32 D_8018F100; +extern void func_8013CABC(void); +extern s32 D_8018F0F8; +extern void func_8013CAE8(void); +extern s32 D_8018F128; +extern s32 D_8018F12C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018F108; +extern s32 D_8018F10C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019062A; +extern u8 D_8019069E; +extern u8 D_80190552; +extern u8 D_8019060C; +extern u8 D_80190530; +extern u8 D_80190551; +extern s32 D_80190610; +extern void func_8013D330(void); +extern void *D_8018F0E0; +extern void *D_8018F0E4; +extern void *D_8018F0E8; +extern s32 D_8018F110; +extern s32 D_8018F114; +extern s32 D_8018F118; +extern s32 D_80190584[]; +extern u8 D_8017EA84[]; +extern u8 D_8017EB2C[]; +extern u8 D_8017E9DC[]; +extern u8 D_8017EAD8[]; +extern u8 D_8017EB58[]; +extern u8 D_8017EA30[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018F0EC; +extern s32 D_8018F11C; +extern s32 D_8018F120; +extern s32 D_8018F124; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018F104; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F5E4; +extern s32 D_80115188; +extern s16 D_8017F5BC; +extern s16 D_8017F5BE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F5C0; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F29C; +extern u8 *D_8017F2A0; +extern u8 *D_8017F2A4; +extern u8 *D_8017F2A8; +extern u8 *D_8017F2AC; +extern u16 *D_8017F2B0[]; +extern u16 *D_8017F2B8[]; +extern u16 *D_8017F2D8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F29C; + iVar2 = func_80028D58(); + puVar3 = D_8017F2B0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F2A0; + iVar2 = func_80028DE0(); + puVar3 = D_8017F2B0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F2A4 + 0x18) = *D_8017F2B8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F2A8 + 0x18) = *D_8017F2B8[iVar2]; + + puVar1 = D_8017F2AC; + iVar2 = func_80028D9C(); + puVar3 = D_8017F2D8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F1D8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F1D8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F1E8; +extern char *D_8017F208; +extern char *D_8017F20C; +extern char *D_8017F210; +extern char *D_8017F214; +extern char *D_8017F218; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F1E8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F208; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F20C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F210; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F214; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F218; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F0A2; +extern unsigned short D_8017F0A6; +extern unsigned short D_8017F0AA; +extern unsigned short D_8017F0AE; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F0A2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F0A6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F0AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F0AE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F638[])(void); + +void func_80141788(void) +{ + D_8017F638[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F644[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F644[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F5BC; +extern s16 D_8017F5BE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F25C; + extern u8 D_8017F274; + extern u8 D_8017F2E8; + extern u8 D_8017F2F0; + extern void *D_8018F138; + extern void *D_8018F13C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018F138 = &D_8017F25C; + D_8018F13C = &D_8017F2E8; + } else { + D_8018F138 = &D_8017F274; + D_8018F13C = &D_8017F2F0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F5BC = 0xE; + D_8017F5BE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F5C0: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F5C0; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F5C0); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F598; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F598 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F668[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F668[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F678[])(void); + +void func_801425CC(void *a0) { + D_8017F678[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F65C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F65C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F68C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F68C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F6A8[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F6A8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F878[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F878[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F930[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F930[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018E81C; +extern u8 D_8018F140; +extern u8 D_8018F141; +extern u8 D_8018F142; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018E81C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018F140 = mul * (local.b[0] >> 4); + D_8018F141 = mul * (local.b[1] >> 4); + D_8018F142 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F680; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F680); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F69C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F69C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F868[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F868[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F888[]; +extern unsigned char D_8017F8E8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F888); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F8E8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018E818; +extern u8 D_8018F140; +extern u8 D_8018F144; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018E818, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018F140); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018F140, 0x10); + memcpy(&D_8018F144, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017FA40[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017FA40[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017FB68[])(void); + +void func_80143B30(void *a0) { + D_8017FB68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017FB74[])(void); + +void func_80143C38(void *a0) { + D_8017FB74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017FB7C[])(void); + +void func_80143C98(void *a0) { + D_8017FB7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80143D28); + + +extern void (*D_8017FBC4[])(void); + +void func_80143E68(void *a0) { + D_8017FBC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017FBD8[])(void); + +void func_80144054(void *a0) { + D_8017FBD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017FBE0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017FBE0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017FB5C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FB5C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017FB70; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FB70 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FB70 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017FB84; +extern u8 D_8017FB90; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FB84); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FB90); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017FB5C; +extern u8 D_8017FBCC; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FB5C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017FBCC, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017FBE8[])(void); + +void func_801449C8(void *a0) { + D_8017FBE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017FBF0[])(void); + +void func_80144A2C(void *a0) { + D_8017FBF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c b/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c index 69fa96b96..94ad263e5 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801854D4; -extern u8 *D_801854D8; -extern u8 *D_801854DC; -extern u8 *D_801854E0; -extern u8 *D_801854E4; -extern u16 *D_801854E8[]; -extern u16 *D_801854F0[]; -extern u16 *D_80185510[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801854D4; - iVar2 = func_80028D58(); - puVar3 = D_801854E8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801854D8; - iVar2 = func_80028DE0(); - puVar3 = D_801854E8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801854DC + 0x18) = *D_801854F0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801854E0 + 0x18) = *D_801854F0[iVar2]; - - puVar1 = D_801854E4; - iVar2 = func_80028D9C(); - puVar3 = D_80185510[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185410; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185410); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185420; -extern char *D_80185440; -extern char *D_80185444; -extern char *D_80185448; -extern char *D_8018544C; -extern char *D_80185450; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185420); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185440; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185444; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185448; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018544C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185450; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801852DA; -extern unsigned short D_801852DE; -extern unsigned short D_801852E2; -extern unsigned short D_801852E6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801852DA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801852DE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801852E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801852E6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80185870[])(void); - -void func_80141788(void) -{ - D_80185870[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018587C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018587C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801857F4; -extern s16 D_801857F6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185494; - extern u8 D_801854AC; - extern u8 D_80185520; - extern u8 D_80185528; - extern void *D_801B2D50; - extern void *D_801B2D54; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B2D50 = &D_80185494; - D_801B2D54 = &D_80185520; - } else { - D_801B2D50 = &D_801854AC; - D_801B2D54 = &D_80185528; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801857F4 = 0xE; - D_801857F6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801857F8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801857F8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801857F8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801857D0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801857D0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801858A0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801858A0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801858B0[])(void); - -void func_801425CC(void *a0) { - D_801858B0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185894; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185894); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801858C4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801858C4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801858E0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801858E0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185AB0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185AB0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185B68[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185B68[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B23FC; -extern u8 D_801B2D58; -extern u8 D_801B2D59; -extern u8 D_801B2D5A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B23FC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B2D58 = mul * (local.b[0] >> 4); - D_801B2D59 = mul * (local.b[1] >> 4); - D_801B2D5A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801858B8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801858B8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801858D4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801858D4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185AA0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185AA0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185AC0[]; -extern unsigned char D_80185B20[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185AC0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185B20); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B23F8; -extern u8 D_801B2D58; -extern u8 D_801B2D5C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B23F8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B2D58); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B2D58, 0x10); - memcpy(&D_801B2D5C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80185C78[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80185C78[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80185DA0[])(void); - -void func_80143B30(void *a0) { - D_80185DA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80185DAC[])(void); - -void func_80143C38(void *a0) { - D_80185DAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80185DB4[])(void); - -void func_80143C98(void *a0) { - D_80185DB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80143D28); - - -extern void (*D_80185DFC[])(void); - -void func_80143E68(void *a0) { - D_80185DFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80185E10[])(void); - -void func_80144054(void *a0) { - D_80185E10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80185E18[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80185E18[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80185D94; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80185D94, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80185DA8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185DA8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185DA8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80185DBC; -extern u8 D_80185DC8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185DBC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185DC8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80185D94; -extern u8 D_80185E04; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80185D94, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80185E04, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80185E20[])(void); - -void func_801449C8(void *a0) { - D_80185E20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80185E28[])(void); - -void func_80144A2C(void *a0) { - D_80185E28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_016/ov_SC02_016_jr_80140608.c b/src/ov_SC02_016/ov_SC02_016_jr_80140608.c new file mode 100644 index 000000000..efe579f4f --- /dev/null +++ b/src/ov_SC02_016/ov_SC02_016_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B1A6C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184714[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B2C0C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B4A68; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B1A6C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184450)(); +extern s16 (*D_80184454)(); +extern M2C_UNK (*D_8018445C)(); +extern s32 (*D_80184460)(); +extern s32 D_801B2C08; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B1A70; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801847A8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80187C8C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801847C0; +extern M2C_UNK D_801847C8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801847D0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801847EC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801847F8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018480C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018485C[]; +extern s16 D_8018488C[]; +extern s16 D_801848EC[]; +extern s16 D_801848F4[]; +extern s16 D_80184914[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018494C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801849A4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801849EC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801849F4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801849FC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184A04[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801849AC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801849CC; +extern void func_801321B0(int param_1); +extern int D_801849DC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B2C78; +extern s32 D_801B2C7C[]; +extern int D_801B2C80; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184A10; +extern u8 D_80184A0C; +extern s16 *D_80184A14; +extern u8 D_80184A18; +extern int D_801B2C78; +extern u16 D_801B2C88; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184A14; /* holds a pointer value (*(u16**)&D_80184A14) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80184A28[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184A7C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184A80[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184AC4; +extern u8 D_80184B08; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184B4C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80184BC4, D_80184BC6, D_80184BC8, D_80184BCA, D_80184BCC, D_80184BCE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B2CF0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B2CF4; +extern s8 D_801B2CF5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B2D14; +extern s32 D_801B2D08; +extern s32 D_801B2D0C; +extern s32 D_801B2D18; +extern void func_8013CABC(void); +extern s32 D_801B2D10; +extern void func_8013CAE8(void); +extern s32 D_801B2D40; +extern s32 D_801B2D44; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B2D20; +extern s32 D_801B2D24; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B4A62; +extern u8 D_801B4AD6; +extern u8 D_801B498A; +extern u8 D_801B4A44; +extern u8 D_801B4968; +extern u8 D_801B4989; +extern s32 D_801B4A48; +extern void func_8013D330(void); +extern void *D_801B2CF8; +extern void *D_801B2CFC; +extern void *D_801B2D00; +extern s32 D_801B2D28; +extern s32 D_801B2D2C; +extern s32 D_801B2D30; +extern s32 D_801B49BC[]; +extern u8 D_80184CBC[]; +extern u8 D_80184D64[]; +extern u8 D_80184C14[]; +extern u8 D_80184D10[]; +extern u8 D_80184D90[]; +extern u8 D_80184C68[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B2D04; +extern s32 D_801B2D34; +extern s32 D_801B2D38; +extern s32 D_801B2D3C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B2D1C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018581C; +extern s32 D_80115188; +extern s16 D_801857F4; +extern s16 D_801857F6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801857F8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801854D4; +extern u8 *D_801854D8; +extern u8 *D_801854DC; +extern u8 *D_801854E0; +extern u8 *D_801854E4; +extern u16 *D_801854E8[]; +extern u16 *D_801854F0[]; +extern u16 *D_80185510[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801854D4; + iVar2 = func_80028D58(); + puVar3 = D_801854E8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801854D8; + iVar2 = func_80028DE0(); + puVar3 = D_801854E8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801854DC + 0x18) = *D_801854F0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801854E0 + 0x18) = *D_801854F0[iVar2]; + + puVar1 = D_801854E4; + iVar2 = func_80028D9C(); + puVar3 = D_80185510[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185410; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185410); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185420; +extern char *D_80185440; +extern char *D_80185444; +extern char *D_80185448; +extern char *D_8018544C; +extern char *D_80185450; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185420); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185440; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185444; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185448; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018544C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185450; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801852DA; +extern unsigned short D_801852DE; +extern unsigned short D_801852E2; +extern unsigned short D_801852E6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801852DA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801852DE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801852E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801852E6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80185870[])(void); + +void func_80141788(void) +{ + D_80185870[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018587C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018587C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801857F4; +extern s16 D_801857F6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185494; + extern u8 D_801854AC; + extern u8 D_80185520; + extern u8 D_80185528; + extern void *D_801B2D50; + extern void *D_801B2D54; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B2D50 = &D_80185494; + D_801B2D54 = &D_80185520; + } else { + D_801B2D50 = &D_801854AC; + D_801B2D54 = &D_80185528; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801857F4 = 0xE; + D_801857F6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801857F8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801857F8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801857F8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801857D0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801857D0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801858A0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801858A0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801858B0[])(void); + +void func_801425CC(void *a0) { + D_801858B0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185894; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185894); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801858C4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801858C4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801858E0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801858E0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185AB0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185AB0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185B68[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185B68[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B23FC; +extern u8 D_801B2D58; +extern u8 D_801B2D59; +extern u8 D_801B2D5A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B23FC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B2D58 = mul * (local.b[0] >> 4); + D_801B2D59 = mul * (local.b[1] >> 4); + D_801B2D5A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801858B8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801858B8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801858D4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801858D4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185AA0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185AA0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185AC0[]; +extern unsigned char D_80185B20[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185AC0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185B20); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B23F8; +extern u8 D_801B2D58; +extern u8 D_801B2D5C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B23F8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B2D58); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B2D58, 0x10); + memcpy(&D_801B2D5C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80185C78[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80185C78[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80185DA0[])(void); + +void func_80143B30(void *a0) { + D_80185DA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80185DAC[])(void); + +void func_80143C38(void *a0) { + D_80185DAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80185DB4[])(void); + +void func_80143C98(void *a0) { + D_80185DB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80143D28); + + +extern void (*D_80185DFC[])(void); + +void func_80143E68(void *a0) { + D_80185DFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80185E10[])(void); + +void func_80144054(void *a0) { + D_80185E10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80185E18[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80185E18[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185D94; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80185D94, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80185DA8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185DA8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185DA8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80185DBC; +extern u8 D_80185DC8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185DBC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185DC8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80185D94; +extern u8 D_80185E04; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80185D94, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80185E04, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80185E20[])(void); + +void func_801449C8(void *a0) { + D_80185E20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80185E28[])(void); + +void func_80144A2C(void *a0) { + D_80185E28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c b/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c index 0278168e4..cc446c4f5 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018B52C; -extern u8 *D_8018B530; -extern u8 *D_8018B534; -extern u8 *D_8018B538; -extern u8 *D_8018B53C; -extern u16 *D_8018B540[]; -extern u16 *D_8018B548[]; -extern u16 *D_8018B568[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018B52C; - iVar2 = func_80028D58(); - puVar3 = D_8018B540[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018B530; - iVar2 = func_80028DE0(); - puVar3 = D_8018B540[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018B534 + 0x18) = *D_8018B548[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018B538 + 0x18) = *D_8018B548[iVar2]; - - puVar1 = D_8018B53C; - iVar2 = func_80028D9C(); - puVar3 = D_8018B568[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018B468; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018B468); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018B478; -extern char *D_8018B498; -extern char *D_8018B49C; -extern char *D_8018B4A0; -extern char *D_8018B4A4; -extern char *D_8018B4A8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018B478); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018B498; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B49C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B4A0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B4A4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B4A8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018B332; -extern unsigned short D_8018B336; -extern unsigned short D_8018B33A; -extern unsigned short D_8018B33E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018B332; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B336; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B33A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B33E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018B8C8[])(void); - -void func_80141788(void) -{ - D_8018B8C8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018B8D4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018B8D4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018B84C; -extern s16 D_8018B84E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018B4EC; - extern u8 D_8018B504; - extern u8 D_8018B578; - extern u8 D_8018B580; - extern void *D_801EE578; - extern void *D_801EE57C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801EE578 = &D_8018B4EC; - D_801EE57C = &D_8018B578; - } else { - D_801EE578 = &D_8018B504; - D_801EE57C = &D_8018B580; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018B84C = 0xE; - D_8018B84E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018B850: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018B850; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018B850); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018B828; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018B828 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018B8F8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018B8F8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018B908[])(void); - -void func_801425CC(void *a0) { - D_8018B908[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018B8EC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018B8EC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018B91C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018B91C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018B938[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018B938[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018BB08[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018BB08[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018BBC0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018BBC0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801EDC1C; -extern u8 D_801EE580; -extern u8 D_801EE581; -extern u8 D_801EE582; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801EDC1C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801EE580 = mul * (local.b[0] >> 4); - D_801EE581 = mul * (local.b[1] >> 4); - D_801EE582 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018B910; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018B910); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018B92C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018B92C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018BAF8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018BAF8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018BB18[]; -extern unsigned char D_8018BB78[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018BB18); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018BB78); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801EDC18; -extern u8 D_801EE580; -extern u8 D_801EE584; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801EDC18, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801EE580); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801EE580, 0x10); - memcpy(&D_801EE584, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018BCD0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018BCD0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018BDF8[])(void); - -void func_80143B30(void *a0) { - D_8018BDF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018BE04[])(void); - -void func_80143C38(void *a0) { - D_8018BE04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018BE0C[])(void); - -void func_80143C98(void *a0) { - D_8018BE0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018BE54[])(void); - -void func_80143E68(void *a0) { - D_8018BE54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018BE68[])(void); - -void func_80144054(void *a0) { - D_8018BE68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018BE70[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018BE70[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018BDEC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018BDEC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018BE00; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018BE00 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018BE00 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018BE14; -extern u8 D_8018BE20; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018BE14); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018BE20); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018BDEC; -extern u8 D_8018BE5C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018BDEC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018BE5C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018BE78[])(void); - -void func_801449C8(void *a0) { - D_8018BE78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018BE80[])(void); - -void func_80144A2C(void *a0) { - D_8018BE80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_017/ov_SC02_017_jr_80140608.c b/src/ov_SC02_017/ov_SC02_017_jr_80140608.c new file mode 100644 index 000000000..4adc53d9d --- /dev/null +++ b/src/ov_SC02_017/ov_SC02_017_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801ED28C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018A76C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801EE434; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801EFCC8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801ED28C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018A4A8)(); +extern s16 (*D_8018A4AC)(); +extern M2C_UNK (*D_8018A4B4)(); +extern s32 (*D_8018A4B8)(); +extern s32 D_801EE430; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801ED290; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018A800; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018DCE4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018A818; +extern M2C_UNK D_8018A820; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018A828; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018A844[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018A850[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018A864[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018A8B4[]; +extern s16 D_8018A8E4[]; +extern s16 D_8018A944[]; +extern s16 D_8018A94C[]; +extern s16 D_8018A96C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018A9A4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018A9FC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018AA44[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018AA4C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018AA54[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018AA5C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018AA04; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018AA24; +extern void func_801321B0(int param_1); +extern int D_8018AA34; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801EE4A0; +extern s32 D_801EE4A4[]; +extern int D_801EE4A8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018AA68; +extern u8 D_8018AA64; +extern s16 *D_8018AA6C; +extern u8 D_8018AA70; +extern int D_801EE4A0; +extern u16 D_801EE4B0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018AA6C; /* holds a pointer value (*(u16**)&D_8018AA6C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018AA80[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018AAD4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018AAD8[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018AB1C; +extern u8 D_8018AB60; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018ABA4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018AC1C, D_8018AC1E, D_8018AC20, D_8018AC22, D_8018AC24, D_8018AC26; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801EE518; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801EE51C; +extern s8 D_801EE51D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801EE53C; +extern s32 D_801EE530; +extern s32 D_801EE534; +extern s32 D_801EE540; +extern void func_8013CABC(void); +extern s32 D_801EE538; +extern void func_8013CAE8(void); +extern s32 D_801EE568; +extern s32 D_801EE56C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801EE548; +extern s32 D_801EE54C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801EFCC2; +extern u8 D_801EFD36; +extern u8 D_801EFBEA; +extern u8 D_801EFCA4; +extern u8 D_801EFBC8; +extern u8 D_801EFBE9; +extern s32 D_801EFCA8; +extern void func_8013D330(void); +extern void *D_801EE520; +extern void *D_801EE524; +extern void *D_801EE528; +extern s32 D_801EE550; +extern s32 D_801EE554; +extern s32 D_801EE558; +extern s32 D_801EFC1C[]; +extern u8 D_8018AD14[]; +extern u8 D_8018ADBC[]; +extern u8 D_8018AC6C[]; +extern u8 D_8018AD68[]; +extern u8 D_8018ADE8[]; +extern u8 D_8018ACC0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801EE52C; +extern s32 D_801EE55C; +extern s32 D_801EE560; +extern s32 D_801EE564; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801EE544; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018B874; +extern s32 D_80115188; +extern s16 D_8018B84C; +extern s16 D_8018B84E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018B850; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018B52C; +extern u8 *D_8018B530; +extern u8 *D_8018B534; +extern u8 *D_8018B538; +extern u8 *D_8018B53C; +extern u16 *D_8018B540[]; +extern u16 *D_8018B548[]; +extern u16 *D_8018B568[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018B52C; + iVar2 = func_80028D58(); + puVar3 = D_8018B540[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018B530; + iVar2 = func_80028DE0(); + puVar3 = D_8018B540[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018B534 + 0x18) = *D_8018B548[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018B538 + 0x18) = *D_8018B548[iVar2]; + + puVar1 = D_8018B53C; + iVar2 = func_80028D9C(); + puVar3 = D_8018B568[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018B468; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018B468); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018B478; +extern char *D_8018B498; +extern char *D_8018B49C; +extern char *D_8018B4A0; +extern char *D_8018B4A4; +extern char *D_8018B4A8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018B478); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018B498; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B49C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B4A0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B4A4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B4A8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018B332; +extern unsigned short D_8018B336; +extern unsigned short D_8018B33A; +extern unsigned short D_8018B33E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018B332; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B336; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B33A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B33E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018B8C8[])(void); + +void func_80141788(void) +{ + D_8018B8C8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018B8D4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018B8D4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018B84C; +extern s16 D_8018B84E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018B4EC; + extern u8 D_8018B504; + extern u8 D_8018B578; + extern u8 D_8018B580; + extern void *D_801EE578; + extern void *D_801EE57C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801EE578 = &D_8018B4EC; + D_801EE57C = &D_8018B578; + } else { + D_801EE578 = &D_8018B504; + D_801EE57C = &D_8018B580; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018B84C = 0xE; + D_8018B84E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018B850: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018B850; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018B850); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018B828; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018B828 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018B8F8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018B8F8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018B908[])(void); + +void func_801425CC(void *a0) { + D_8018B908[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018B8EC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018B8EC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018B91C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018B91C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018B938[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018B938[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018BB08[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018BB08[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018BBC0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018BBC0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801EDC1C; +extern u8 D_801EE580; +extern u8 D_801EE581; +extern u8 D_801EE582; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801EDC1C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801EE580 = mul * (local.b[0] >> 4); + D_801EE581 = mul * (local.b[1] >> 4); + D_801EE582 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018B910; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018B910); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018B92C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018B92C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018BAF8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018BAF8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018BB18[]; +extern unsigned char D_8018BB78[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018BB18); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018BB78); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801EDC18; +extern u8 D_801EE580; +extern u8 D_801EE584; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801EDC18, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801EE580); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801EE580, 0x10); + memcpy(&D_801EE584, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018BCD0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018BCD0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018BDF8[])(void); + +void func_80143B30(void *a0) { + D_8018BDF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018BE04[])(void); + +void func_80143C38(void *a0) { + D_8018BE04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018BE0C[])(void); + +void func_80143C98(void *a0) { + D_8018BE0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80143D28); + + +extern void (*D_8018BE54[])(void); + +void func_80143E68(void *a0) { + D_8018BE54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018BE68[])(void); + +void func_80144054(void *a0) { + D_8018BE68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018BE70[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018BE70[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018BDEC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018BDEC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018BE00; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018BE00 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018BE00 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018BE14; +extern u8 D_8018BE20; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018BE14); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018BE20); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018BDEC; +extern u8 D_8018BE5C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018BDEC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018BE5C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018BE78[])(void); + +void func_801449C8(void *a0) { + D_8018BE78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018BE80[])(void); + +void func_80144A2C(void *a0) { + D_8018BE80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c b/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c index 834e23b05..c89fa70e6 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80180B20; -extern u8 *D_80180B24; -extern u8 *D_80180B28; -extern u8 *D_80180B2C; -extern u8 *D_80180B30; -extern u16 *D_80180B34[]; -extern u16 *D_80180B3C[]; -extern u16 *D_80180B5C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80180B20; - iVar2 = func_80028D58(); - puVar3 = D_80180B34[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80180B24; - iVar2 = func_80028DE0(); - puVar3 = D_80180B34[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80180B28 + 0x18) = *D_80180B3C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80180B2C + 0x18) = *D_80180B3C[iVar2]; - - puVar1 = D_80180B30; - iVar2 = func_80028D9C(); - puVar3 = D_80180B5C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180A5C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180A5C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180A6C; -extern char *D_80180A8C; -extern char *D_80180A90; -extern char *D_80180A94; -extern char *D_80180A98; -extern char *D_80180A9C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180A6C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180A8C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180A90; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180A94; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180A98; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180A9C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80180926; -extern unsigned short D_8018092A; -extern unsigned short D_8018092E; -extern unsigned short D_80180932; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80180926; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018092A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018092E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180932; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80180EBC[])(void); - -void func_80141788(void) -{ - D_80180EBC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180EC8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180EC8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80180E40; -extern s16 D_80180E42; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180AE0; - extern u8 D_80180AF8; - extern u8 D_80180B6C; - extern u8 D_80180B74; - extern void *D_80191AE8; - extern void *D_80191AEC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80191AE8 = &D_80180AE0; - D_80191AEC = &D_80180B6C; - } else { - D_80191AE8 = &D_80180AF8; - D_80191AEC = &D_80180B74; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80180E40 = 0xE; - D_80180E42 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80180E44: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80180E44; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80180E44); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80180E1C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80180E1C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80180EEC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80180EEC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80180EFC[])(void); - -void func_801425CC(void *a0) { - D_80180EFC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180EE0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180EE0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180F10[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180F10[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180F2C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180F2C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801810FC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801810FC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801811B4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801811B4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80191198; -extern u8 D_80191AF0; -extern u8 D_80191AF1; -extern u8 D_80191AF2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80191198; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80191AF0 = mul * (local.b[0] >> 4); - D_80191AF1 = mul * (local.b[1] >> 4); - D_80191AF2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180F04; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180F04); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180F20[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180F20); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801810EC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801810EC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018110C[]; -extern unsigned char D_8018116C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018110C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018116C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80191194; -extern u8 D_80191AF0; -extern u8 D_80191AF4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80191194, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80191AF0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80191AF0, 0x10); - memcpy(&D_80191AF4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801812C4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801812C4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801813EC[])(void); - -void func_80143B30(void *a0) { - D_801813EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801813F8[])(void); - -void func_80143C38(void *a0) { - D_801813F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80181400[])(void); - -void func_80143C98(void *a0) { - D_80181400[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80143D28); - - -extern void (*D_80181448[])(void); - -void func_80143E68(void *a0) { - D_80181448[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018145C[])(void); - -void func_80144054(void *a0) { - D_8018145C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80181464[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80181464[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801813E0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801813E0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801813F4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801813F4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801813F4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80181408; -extern u8 D_80181414; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181408); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181414); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801813E0; -extern u8 D_80181450; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801813E0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80181450, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018146C[])(void); - -void func_801449C8(void *a0) { - D_8018146C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80181474[])(void); - -void func_80144A2C(void *a0) { - D_80181474[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_021/ov_SC02_021_jr_80140608.c b/src/ov_SC02_021/ov_SC02_021_jr_80140608.c new file mode 100644 index 000000000..cf05a67f2 --- /dev/null +++ b/src/ov_SC02_021/ov_SC02_021_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80190808; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017FD60[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801919A4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80193830; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80190808; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017FA9C)(); +extern s16 (*D_8017FAA0)(); +extern M2C_UNK (*D_8017FAA8)(); +extern s32 (*D_8017FAAC)(); +extern s32 D_801919A0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019080C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017FDF4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801832D8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017FE0C; +extern M2C_UNK D_8017FE14; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017FE1C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017FE38[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017FE44[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017FE58[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017FEA8[]; +extern s16 D_8017FED8[]; +extern s16 D_8017FF38[]; +extern s16 D_8017FF40[]; +extern s16 D_8017FF60[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017FF98[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017FFF0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80180038[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80180040[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80180048[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80180050[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017FFF8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80180018; +extern void func_801321B0(int param_1); +extern int D_80180028; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80191A10; +extern s32 D_80191A14[]; +extern int D_80191A18; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018005C; +extern u8 D_80180058; +extern s16 *D_80180060; +extern u8 D_80180064; +extern int D_80191A10; +extern u16 D_80191A20; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80180060; /* holds a pointer value (*(u16**)&D_80180060) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80180074[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801800C8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801800CC[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80180110; +extern u8 D_80180154; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80180198[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80180210, D_80180212, D_80180214, D_80180216, D_80180218, D_8018021A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80191A88; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80191A8C; +extern s8 D_80191A8D; +extern void func_8013C9C4(void * arg0); +extern s32 D_80191AAC; +extern s32 D_80191AA0; +extern s32 D_80191AA4; +extern s32 D_80191AB0; +extern void func_8013CABC(void); +extern s32 D_80191AA8; +extern void func_8013CAE8(void); +extern s32 D_80191AD8; +extern s32 D_80191ADC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80191AB8; +extern s32 D_80191ABC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019382A; +extern u8 D_8019389E; +extern u8 D_80193752; +extern u8 D_8019380C; +extern u8 D_80193730; +extern u8 D_80193751; +extern s32 D_80193810; +extern void func_8013D330(void); +extern void *D_80191A90; +extern void *D_80191A94; +extern void *D_80191A98; +extern s32 D_80191AC0; +extern s32 D_80191AC4; +extern s32 D_80191AC8; +extern s32 D_80193784[]; +extern u8 D_80180308[]; +extern u8 D_801803B0[]; +extern u8 D_80180260[]; +extern u8 D_8018035C[]; +extern u8 D_801803DC[]; +extern u8 D_801802B4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80191A9C; +extern s32 D_80191ACC; +extern s32 D_80191AD0; +extern s32 D_80191AD4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80191AB4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180E68; +extern s32 D_80115188; +extern s16 D_80180E40; +extern s16 D_80180E42; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80180E44; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80180B20; +extern u8 *D_80180B24; +extern u8 *D_80180B28; +extern u8 *D_80180B2C; +extern u8 *D_80180B30; +extern u16 *D_80180B34[]; +extern u16 *D_80180B3C[]; +extern u16 *D_80180B5C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80180B20; + iVar2 = func_80028D58(); + puVar3 = D_80180B34[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80180B24; + iVar2 = func_80028DE0(); + puVar3 = D_80180B34[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80180B28 + 0x18) = *D_80180B3C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80180B2C + 0x18) = *D_80180B3C[iVar2]; + + puVar1 = D_80180B30; + iVar2 = func_80028D9C(); + puVar3 = D_80180B5C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180A5C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180A5C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180A6C; +extern char *D_80180A8C; +extern char *D_80180A90; +extern char *D_80180A94; +extern char *D_80180A98; +extern char *D_80180A9C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180A6C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180A8C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180A90; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180A94; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180A98; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180A9C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80180926; +extern unsigned short D_8018092A; +extern unsigned short D_8018092E; +extern unsigned short D_80180932; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80180926; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018092A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018092E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180932; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80180EBC[])(void); + +void func_80141788(void) +{ + D_80180EBC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180EC8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180EC8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80180E40; +extern s16 D_80180E42; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180AE0; + extern u8 D_80180AF8; + extern u8 D_80180B6C; + extern u8 D_80180B74; + extern void *D_80191AE8; + extern void *D_80191AEC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80191AE8 = &D_80180AE0; + D_80191AEC = &D_80180B6C; + } else { + D_80191AE8 = &D_80180AF8; + D_80191AEC = &D_80180B74; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80180E40 = 0xE; + D_80180E42 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80180E44: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80180E44; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80180E44); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80180E1C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80180E1C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80180EEC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80180EEC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80180EFC[])(void); + +void func_801425CC(void *a0) { + D_80180EFC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180EE0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180EE0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180F10[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180F10[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180F2C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180F2C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801810FC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801810FC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801811B4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801811B4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80191198; +extern u8 D_80191AF0; +extern u8 D_80191AF1; +extern u8 D_80191AF2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80191198; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80191AF0 = mul * (local.b[0] >> 4); + D_80191AF1 = mul * (local.b[1] >> 4); + D_80191AF2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180F04; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180F04); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180F20[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180F20); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801810EC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801810EC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018110C[]; +extern unsigned char D_8018116C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018110C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018116C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80191194; +extern u8 D_80191AF0; +extern u8 D_80191AF4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80191194, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80191AF0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80191AF0, 0x10); + memcpy(&D_80191AF4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801812C4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801812C4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801813EC[])(void); + +void func_80143B30(void *a0) { + D_801813EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801813F8[])(void); + +void func_80143C38(void *a0) { + D_801813F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80181400[])(void); + +void func_80143C98(void *a0) { + D_80181400[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80143D28); + + +extern void (*D_80181448[])(void); + +void func_80143E68(void *a0) { + D_80181448[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018145C[])(void); + +void func_80144054(void *a0) { + D_8018145C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80181464[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80181464[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801813E0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801813E0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801813F4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801813F4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801813F4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80181408; +extern u8 D_80181414; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181408); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181414); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801813E0; +extern u8 D_80181450; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801813E0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80181450, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018146C[])(void); + +void func_801449C8(void *a0) { + D_8018146C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80181474[])(void); + +void func_80144A2C(void *a0) { + D_80181474[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c b/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c index a655ad368..dfaee469e 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80187174; -extern u8 *D_80187178; -extern u8 *D_8018717C; -extern u8 *D_80187180; -extern u8 *D_80187184; -extern u16 *D_80187188[]; -extern u16 *D_80187190[]; -extern u16 *D_801871B0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80187174; - iVar2 = func_80028D58(); - puVar3 = D_80187188[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80187178; - iVar2 = func_80028DE0(); - puVar3 = D_80187188[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018717C + 0x18) = *D_80187190[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80187180 + 0x18) = *D_80187190[iVar2]; - - puVar1 = D_80187184; - iVar2 = func_80028D9C(); - puVar3 = D_801871B0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801870B0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801870B0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801870C0; -extern char *D_801870E0; -extern char *D_801870E4; -extern char *D_801870E8; -extern char *D_801870EC; -extern char *D_801870F0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801870C0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801870E0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801870E4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801870E8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801870EC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801870F0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80186F7A; -extern unsigned short D_80186F7E; -extern unsigned short D_80186F82; -extern unsigned short D_80186F86; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80186F7A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80186F7E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186F82; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186F86; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80187510[])(void); - -void func_80141788(void) -{ - D_80187510[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018751C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018751C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80187494; -extern s16 D_80187496; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80187134; - extern u8 D_8018714C; - extern u8 D_801871C0; - extern u8 D_801871C8; - extern void *D_801CEF28; - extern void *D_801CEF2C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CEF28 = &D_80187134; - D_801CEF2C = &D_801871C0; - } else { - D_801CEF28 = &D_8018714C; - D_801CEF2C = &D_801871C8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80187494 = 0xE; - D_80187496 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80187498: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80187498; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80187498); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80187470; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80187470 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80187540[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80187540[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80187550[])(void); - -void func_801425CC(void *a0) { - D_80187550[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80187534; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80187534); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187564[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187564[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187580[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187580[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187750[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187750[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187808[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187808[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CE5CC; -extern u8 D_801CEF30; -extern u8 D_801CEF31; -extern u8 D_801CEF32; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CE5CC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CEF30 = mul * (local.b[0] >> 4); - D_801CEF31 = mul * (local.b[1] >> 4); - D_801CEF32 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80187558; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187558); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187574[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187574); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80187740[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80187740[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187760[]; -extern unsigned char D_801877C0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187760); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801877C0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CE5C8; -extern u8 D_801CEF30; -extern u8 D_801CEF34; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CE5C8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CEF30); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CEF30, 0x10); - memcpy(&D_801CEF34, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80187918[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80187918[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80187A40[])(void); - -void func_80143B30(void *a0) { - D_80187A40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80187A4C[])(void); - -void func_80143C38(void *a0) { - D_80187A4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80187A54[])(void); - -void func_80143C98(void *a0) { - D_80187A54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80143D28); - - -extern void (*D_80187A9C[])(void); - -void func_80143E68(void *a0) { - D_80187A9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80187AB0[])(void); - -void func_80144054(void *a0) { - D_80187AB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80187AB8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80187AB8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80187A34; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80187A34, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80187A48; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187A48 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187A48 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80187A5C; -extern u8 D_80187A68; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187A5C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187A68); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80187A34; -extern u8 D_80187AA4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80187A34, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80187AA4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80187AC0[])(void); - -void func_801449C8(void *a0) { - D_80187AC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80187AC8[])(void); - -void func_80144A2C(void *a0) { - D_80187AC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_026/ov_SC02_026_jr_80140608.c b/src/ov_SC02_026/ov_SC02_026_jr_80140608.c new file mode 100644 index 000000000..b3a009807 --- /dev/null +++ b/src/ov_SC02_026/ov_SC02_026_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CDC3C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801863B4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CEDE4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D0250; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CDC3C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801860F0)(); +extern s16 (*D_801860F4)(); +extern M2C_UNK (*D_801860FC)(); +extern s32 (*D_80186100)(); +extern s32 D_801CEDE0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CDC40; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80186448; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018992C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80186460; +extern M2C_UNK D_80186468; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80186470; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018648C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80186498[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801864AC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801864FC[]; +extern s16 D_8018652C[]; +extern s16 D_8018658C[]; +extern s16 D_80186594[]; +extern s16 D_801865B4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801865EC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80186644[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018668C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80186694[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018669C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801866A4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018664C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018666C; +extern void func_801321B0(int param_1); +extern int D_8018667C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CEE50; +extern s32 D_801CEE54[]; +extern int D_801CEE58; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801866B0; +extern u8 D_801866AC; +extern s16 *D_801866B4; +extern u8 D_801866B8; +extern int D_801CEE50; +extern u16 D_801CEE60; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801866B4; /* holds a pointer value (*(u16**)&D_801866B4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801866C8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018671C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186720[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80186764; +extern u8 D_801867A8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801867EC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80186864, D_80186866, D_80186868, D_8018686A, D_8018686C, D_8018686E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CEEC8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CEECC; +extern s8 D_801CEECD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CEEEC; +extern s32 D_801CEEE0; +extern s32 D_801CEEE4; +extern s32 D_801CEEF0; +extern void func_8013CABC(void); +extern s32 D_801CEEE8; +extern void func_8013CAE8(void); +extern s32 D_801CEF18; +extern s32 D_801CEF1C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CEEF8; +extern s32 D_801CEEFC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D024A; +extern u8 D_801D02BE; +extern u8 D_801D0172; +extern u8 D_801D022C; +extern u8 D_801D0150; +extern u8 D_801D0171; +extern s32 D_801D0230; +extern void func_8013D330(void); +extern void *D_801CEED0; +extern void *D_801CEED4; +extern void *D_801CEED8; +extern s32 D_801CEF00; +extern s32 D_801CEF04; +extern s32 D_801CEF08; +extern s32 D_801D01A4[]; +extern u8 D_8018695C[]; +extern u8 D_80186A04[]; +extern u8 D_801868B4[]; +extern u8 D_801869B0[]; +extern u8 D_80186A30[]; +extern u8 D_80186908[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CEEDC; +extern s32 D_801CEF0C; +extern s32 D_801CEF10; +extern s32 D_801CEF14; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CEEF4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801874BC; +extern s32 D_80115188; +extern s16 D_80187494; +extern s16 D_80187496; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80187498; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80187174; +extern u8 *D_80187178; +extern u8 *D_8018717C; +extern u8 *D_80187180; +extern u8 *D_80187184; +extern u16 *D_80187188[]; +extern u16 *D_80187190[]; +extern u16 *D_801871B0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80187174; + iVar2 = func_80028D58(); + puVar3 = D_80187188[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80187178; + iVar2 = func_80028DE0(); + puVar3 = D_80187188[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018717C + 0x18) = *D_80187190[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80187180 + 0x18) = *D_80187190[iVar2]; + + puVar1 = D_80187184; + iVar2 = func_80028D9C(); + puVar3 = D_801871B0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801870B0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801870B0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801870C0; +extern char *D_801870E0; +extern char *D_801870E4; +extern char *D_801870E8; +extern char *D_801870EC; +extern char *D_801870F0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801870C0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801870E0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801870E4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801870E8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801870EC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801870F0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80186F7A; +extern unsigned short D_80186F7E; +extern unsigned short D_80186F82; +extern unsigned short D_80186F86; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80186F7A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80186F7E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186F82; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186F86; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80187510[])(void); + +void func_80141788(void) +{ + D_80187510[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018751C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018751C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80187494; +extern s16 D_80187496; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80187134; + extern u8 D_8018714C; + extern u8 D_801871C0; + extern u8 D_801871C8; + extern void *D_801CEF28; + extern void *D_801CEF2C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CEF28 = &D_80187134; + D_801CEF2C = &D_801871C0; + } else { + D_801CEF28 = &D_8018714C; + D_801CEF2C = &D_801871C8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80187494 = 0xE; + D_80187496 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80187498: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80187498; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80187498); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80187470; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80187470 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80187540[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80187540[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80187550[])(void); + +void func_801425CC(void *a0) { + D_80187550[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80187534; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80187534); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187564[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187564[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187580[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187580[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187750[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187750[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187808[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187808[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CE5CC; +extern u8 D_801CEF30; +extern u8 D_801CEF31; +extern u8 D_801CEF32; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CE5CC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CEF30 = mul * (local.b[0] >> 4); + D_801CEF31 = mul * (local.b[1] >> 4); + D_801CEF32 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80187558; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187558); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187574[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187574); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80187740[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80187740[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187760[]; +extern unsigned char D_801877C0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187760); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801877C0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CE5C8; +extern u8 D_801CEF30; +extern u8 D_801CEF34; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CE5C8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CEF30); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CEF30, 0x10); + memcpy(&D_801CEF34, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80187918[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80187918[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80187A40[])(void); + +void func_80143B30(void *a0) { + D_80187A40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80187A4C[])(void); + +void func_80143C38(void *a0) { + D_80187A4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80187A54[])(void); + +void func_80143C98(void *a0) { + D_80187A54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80143D28); + + +extern void (*D_80187A9C[])(void); + +void func_80143E68(void *a0) { + D_80187A9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80187AB0[])(void); + +void func_80144054(void *a0) { + D_80187AB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80187AB8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80187AB8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187A34; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80187A34, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80187A48; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187A48 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187A48 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80187A5C; +extern u8 D_80187A68; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187A5C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187A68); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80187A34; +extern u8 D_80187AA4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80187A34, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80187AA4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80187AC0[])(void); + +void func_801449C8(void *a0) { + D_80187AC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80187AC8[])(void); + +void func_80144A2C(void *a0) { + D_80187AC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c b/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c index 46b7c3075..ee93ba375 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018C298; -extern u8 *D_8018C29C; -extern u8 *D_8018C2A0; -extern u8 *D_8018C2A4; -extern u8 *D_8018C2A8; -extern u16 *D_8018C2AC[]; -extern u16 *D_8018C2B4[]; -extern u16 *D_8018C2D4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018C298; - iVar2 = func_80028D58(); - puVar3 = D_8018C2AC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018C29C; - iVar2 = func_80028DE0(); - puVar3 = D_8018C2AC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018C2A0 + 0x18) = *D_8018C2B4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018C2A4 + 0x18) = *D_8018C2B4[iVar2]; - - puVar1 = D_8018C2A8; - iVar2 = func_80028D9C(); - puVar3 = D_8018C2D4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018C1D4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018C1D4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018C1E4; -extern char *D_8018C204; -extern char *D_8018C208; -extern char *D_8018C20C; -extern char *D_8018C210; -extern char *D_8018C214; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018C1E4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018C204; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C208; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C20C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C210; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C214; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018C09E; -extern unsigned short D_8018C0A2; -extern unsigned short D_8018C0A6; -extern unsigned short D_8018C0AA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018C09E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C0A2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C0A6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C0AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018C634[])(void); - -void func_80141788(void) -{ - D_8018C634[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018C640[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018C640[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018C5B8; -extern s16 D_8018C5BA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018C258; - extern u8 D_8018C270; - extern u8 D_8018C2E4; - extern u8 D_8018C2EC; - extern void *D_801D8C98; - extern void *D_801D8C9C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D8C98 = &D_8018C258; - D_801D8C9C = &D_8018C2E4; - } else { - D_801D8C98 = &D_8018C270; - D_801D8C9C = &D_8018C2EC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018C5B8 = 0xE; - D_8018C5BA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018C5BC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018C5BC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018C5BC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018C594; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018C594 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018C664[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018C664[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018C674[])(void); - -void func_801425CC(void *a0) { - D_8018C674[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018C658; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018C658); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C688[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C688[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C6A4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C6A4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C874[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C874[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C92C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C92C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D8338; -extern u8 D_801D8CA0; -extern u8 D_801D8CA1; -extern u8 D_801D8CA2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D8338; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D8CA0 = mul * (local.b[0] >> 4); - D_801D8CA1 = mul * (local.b[1] >> 4); - D_801D8CA2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018C67C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C67C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C698[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C698); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018C864[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018C864[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C884[]; -extern unsigned char D_8018C8E4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C884); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018C8E4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D8334; -extern u8 D_801D8CA0; -extern u8 D_801D8CA4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D8334, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D8CA0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D8CA0, 0x10); - memcpy(&D_801D8CA4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018CA3C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018CA3C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018CB64[])(void); - -void func_80143B30(void *a0) { - D_8018CB64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018CB70[])(void); - -void func_80143C38(void *a0) { - D_8018CB70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018CB78[])(void); - -void func_80143C98(void *a0) { - D_8018CB78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018CBC0[])(void); - -void func_80143E68(void *a0) { - D_8018CBC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018CBD4[])(void); - -void func_80144054(void *a0) { - D_8018CBD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018CBDC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018CBDC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018CB58; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018CB58, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018CB6C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CB6C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CB6C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018CB80; -extern u8 D_8018CB8C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CB80); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CB8C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018CB58; -extern u8 D_8018CBC8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018CB58, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018CBC8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018CBE4[])(void); - -void func_801449C8(void *a0) { - D_8018CBE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018CBEC[])(void); - -void func_80144A2C(void *a0) { - D_8018CBEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_027/ov_SC02_027_jr_80140608.c b/src/ov_SC02_027/ov_SC02_027_jr_80140608.c new file mode 100644 index 000000000..202b11b29 --- /dev/null +++ b/src/ov_SC02_027/ov_SC02_027_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801D79A8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018B4D8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D8B54; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801DA9D0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801D79A8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018B214)(); +extern s16 (*D_8018B218)(); +extern M2C_UNK (*D_8018B220)(); +extern s32 (*D_8018B224)(); +extern s32 D_801D8B50; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801D79AC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018B56C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018EA50; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018B584; +extern M2C_UNK D_8018B58C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018B594; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018B5B0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018B5BC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018B5D0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018B620[]; +extern s16 D_8018B650[]; +extern s16 D_8018B6B0[]; +extern s16 D_8018B6B8[]; +extern s16 D_8018B6D8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018B710[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018B768[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018B7B0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018B7B8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018B7C0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018B7C8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018B770; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018B790; +extern void func_801321B0(int param_1); +extern int D_8018B7A0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D8BC0; +extern s32 D_801D8BC4[]; +extern int D_801D8BC8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018B7D4; +extern u8 D_8018B7D0; +extern s16 *D_8018B7D8; +extern u8 D_8018B7DC; +extern int D_801D8BC0; +extern u16 D_801D8BD0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018B7D8; /* holds a pointer value (*(u16**)&D_8018B7D8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018B7EC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018B840; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018B844[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018B888; +extern u8 D_8018B8CC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018B910[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018B988, D_8018B98A, D_8018B98C, D_8018B98E, D_8018B990, D_8018B992; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D8C38; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D8C3C; +extern s8 D_801D8C3D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D8C5C; +extern s32 D_801D8C50; +extern s32 D_801D8C54; +extern s32 D_801D8C60; +extern void func_8013CABC(void); +extern s32 D_801D8C58; +extern void func_8013CAE8(void); +extern s32 D_801D8C88; +extern s32 D_801D8C8C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D8C68; +extern s32 D_801D8C6C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801DA9CA; +extern u8 D_801DAA3E; +extern u8 D_801DA8F2; +extern u8 D_801DA9AC; +extern u8 D_801DA8D0; +extern u8 D_801DA8F1; +extern s32 D_801DA9B0; +extern void func_8013D330(void); +extern void *D_801D8C40; +extern void *D_801D8C44; +extern void *D_801D8C48; +extern s32 D_801D8C70; +extern s32 D_801D8C74; +extern s32 D_801D8C78; +extern s32 D_801DA924[]; +extern u8 D_8018BA80[]; +extern u8 D_8018BB28[]; +extern u8 D_8018B9D8[]; +extern u8 D_8018BAD4[]; +extern u8 D_8018BB54[]; +extern u8 D_8018BA2C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D8C4C; +extern s32 D_801D8C7C; +extern s32 D_801D8C80; +extern s32 D_801D8C84; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D8C64; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018C5E0; +extern s32 D_80115188; +extern s16 D_8018C5B8; +extern s16 D_8018C5BA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018C5BC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018C298; +extern u8 *D_8018C29C; +extern u8 *D_8018C2A0; +extern u8 *D_8018C2A4; +extern u8 *D_8018C2A8; +extern u16 *D_8018C2AC[]; +extern u16 *D_8018C2B4[]; +extern u16 *D_8018C2D4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018C298; + iVar2 = func_80028D58(); + puVar3 = D_8018C2AC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018C29C; + iVar2 = func_80028DE0(); + puVar3 = D_8018C2AC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018C2A0 + 0x18) = *D_8018C2B4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018C2A4 + 0x18) = *D_8018C2B4[iVar2]; + + puVar1 = D_8018C2A8; + iVar2 = func_80028D9C(); + puVar3 = D_8018C2D4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018C1D4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018C1D4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018C1E4; +extern char *D_8018C204; +extern char *D_8018C208; +extern char *D_8018C20C; +extern char *D_8018C210; +extern char *D_8018C214; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018C1E4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018C204; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C208; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C20C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C210; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C214; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018C09E; +extern unsigned short D_8018C0A2; +extern unsigned short D_8018C0A6; +extern unsigned short D_8018C0AA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018C09E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C0A2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C0A6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C0AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018C634[])(void); + +void func_80141788(void) +{ + D_8018C634[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018C640[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018C640[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018C5B8; +extern s16 D_8018C5BA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018C258; + extern u8 D_8018C270; + extern u8 D_8018C2E4; + extern u8 D_8018C2EC; + extern void *D_801D8C98; + extern void *D_801D8C9C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D8C98 = &D_8018C258; + D_801D8C9C = &D_8018C2E4; + } else { + D_801D8C98 = &D_8018C270; + D_801D8C9C = &D_8018C2EC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018C5B8 = 0xE; + D_8018C5BA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018C5BC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018C5BC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018C5BC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018C594; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018C594 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018C664[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018C664[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018C674[])(void); + +void func_801425CC(void *a0) { + D_8018C674[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018C658; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018C658); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C688[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C688[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C6A4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C6A4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C874[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C874[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C92C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C92C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D8338; +extern u8 D_801D8CA0; +extern u8 D_801D8CA1; +extern u8 D_801D8CA2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D8338; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D8CA0 = mul * (local.b[0] >> 4); + D_801D8CA1 = mul * (local.b[1] >> 4); + D_801D8CA2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018C67C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C67C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C698[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C698); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018C864[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018C864[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C884[]; +extern unsigned char D_8018C8E4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C884); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018C8E4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D8334; +extern u8 D_801D8CA0; +extern u8 D_801D8CA4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D8334, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D8CA0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D8CA0, 0x10); + memcpy(&D_801D8CA4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018CA3C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018CA3C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018CB64[])(void); + +void func_80143B30(void *a0) { + D_8018CB64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018CB70[])(void); + +void func_80143C38(void *a0) { + D_8018CB70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018CB78[])(void); + +void func_80143C98(void *a0) { + D_8018CB78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80143D28); + + +extern void (*D_8018CBC0[])(void); + +void func_80143E68(void *a0) { + D_8018CBC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018CBD4[])(void); + +void func_80144054(void *a0) { + D_8018CBD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018CBDC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018CBDC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018CB58; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018CB58, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018CB6C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CB6C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CB6C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018CB80; +extern u8 D_8018CB8C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CB80); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CB8C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018CB58; +extern u8 D_8018CBC8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018CB58, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018CBC8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018CBE4[])(void); + +void func_801449C8(void *a0) { + D_8018CBE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018CBEC[])(void); + +void func_80144A2C(void *a0) { + D_8018CBEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c b/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c index e597ca686..6efc28239 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018C49C; -extern u8 *D_8018C4A0; -extern u8 *D_8018C4A4; -extern u8 *D_8018C4A8; -extern u8 *D_8018C4AC; -extern u16 *D_8018C4B0[]; -extern u16 *D_8018C4B8[]; -extern u16 *D_8018C4D8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018C49C; - iVar2 = func_80028D58(); - puVar3 = D_8018C4B0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018C4A0; - iVar2 = func_80028DE0(); - puVar3 = D_8018C4B0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018C4A4 + 0x18) = *D_8018C4B8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018C4A8 + 0x18) = *D_8018C4B8[iVar2]; - - puVar1 = D_8018C4AC; - iVar2 = func_80028D9C(); - puVar3 = D_8018C4D8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018C3D8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018C3D8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018C3E8; -extern char *D_8018C408; -extern char *D_8018C40C; -extern char *D_8018C410; -extern char *D_8018C414; -extern char *D_8018C418; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018C3E8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018C408; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C40C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C410; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C414; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C418; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018C2A2; -extern unsigned short D_8018C2A6; -extern unsigned short D_8018C2AA; -extern unsigned short D_8018C2AE; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018C2A2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C2A6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C2AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C2AE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018C838[])(void); - -void func_80141788(void) -{ - D_8018C838[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018C844[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018C844[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018C7BC; -extern s16 D_8018C7BE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018C45C; - extern u8 D_8018C474; - extern u8 D_8018C4E8; - extern u8 D_8018C4F0; - extern void *D_801D1C38; - extern void *D_801D1C3C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D1C38 = &D_8018C45C; - D_801D1C3C = &D_8018C4E8; - } else { - D_801D1C38 = &D_8018C474; - D_801D1C3C = &D_8018C4F0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018C7BC = 0xE; - D_8018C7BE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018C7C0: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018C7C0; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018C7C0); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018C798; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018C798 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018C868[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018C868[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018C878[])(void); - -void func_801425CC(void *a0) { - D_8018C878[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018C85C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018C85C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C88C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C88C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C8A8[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C8A8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CA78[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CA78[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CB30[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CB30[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D12BC; -extern u8 D_801D1C40; -extern u8 D_801D1C41; -extern u8 D_801D1C42; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D12BC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D1C40 = mul * (local.b[0] >> 4); - D_801D1C41 = mul * (local.b[1] >> 4); - D_801D1C42 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018C880; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C880); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C89C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C89C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018CA68[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018CA68[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018CA88[]; -extern unsigned char D_8018CAE8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018CA88); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018CAE8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D12B8; -extern u8 D_801D1C40; -extern u8 D_801D1C44; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D12B8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D1C40); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D1C40, 0x10); - memcpy(&D_801D1C44, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018CC40[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018CC40[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018CD68[])(void); - -void func_80143B30(void *a0) { - D_8018CD68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018CD74[])(void); - -void func_80143C38(void *a0) { - D_8018CD74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018CD7C[])(void); - -void func_80143C98(void *a0) { - D_8018CD7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018CDC4[])(void); - -void func_80143E68(void *a0) { - D_8018CDC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018CDD8[])(void); - -void func_80144054(void *a0) { - D_8018CDD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018CDE0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018CDE0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018CD5C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018CD5C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018CD70; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CD70 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CD70 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018CD84; -extern u8 D_8018CD90; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CD84); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CD90); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018CD5C; -extern u8 D_8018CDCC; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018CD5C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018CDCC, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018CDE8[])(void); - -void func_801449C8(void *a0) { - D_8018CDE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018CDF0[])(void); - -void func_80144A2C(void *a0) { - D_8018CDF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_028/ov_SC02_028_jr_80140608.c b/src/ov_SC02_028/ov_SC02_028_jr_80140608.c new file mode 100644 index 000000000..fcf372530 --- /dev/null +++ b/src/ov_SC02_028/ov_SC02_028_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801D092C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018B6DC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D1AF4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D35D0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801D092C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018B418)(); +extern s16 (*D_8018B41C)(); +extern M2C_UNK (*D_8018B424)(); +extern s32 (*D_8018B428)(); +extern s32 D_801D1AF0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801D0930; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018B770; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018EC54; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018B788; +extern M2C_UNK D_8018B790; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018B798; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018B7B4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018B7C0[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018B7D4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018B824[]; +extern s16 D_8018B854[]; +extern s16 D_8018B8B4[]; +extern s16 D_8018B8BC[]; +extern s16 D_8018B8DC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018B914[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018B96C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018B9B4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018B9BC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018B9C4[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018B9CC[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018B974; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018B994; +extern void func_801321B0(int param_1); +extern int D_8018B9A4; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D1B60; +extern s32 D_801D1B64[]; +extern int D_801D1B68; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018B9D8; +extern u8 D_8018B9D4; +extern s16 *D_8018B9DC; +extern u8 D_8018B9E0; +extern int D_801D1B60; +extern u16 D_801D1B70; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018B9DC; /* holds a pointer value (*(u16**)&D_8018B9DC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018B9F0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018BA44; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018BA48[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018BA8C; +extern u8 D_8018BAD0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018BB14[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018BB8C, D_8018BB8E, D_8018BB90, D_8018BB92, D_8018BB94, D_8018BB96; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D1BD8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D1BDC; +extern s8 D_801D1BDD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D1BFC; +extern s32 D_801D1BF0; +extern s32 D_801D1BF4; +extern s32 D_801D1C00; +extern void func_8013CABC(void); +extern s32 D_801D1BF8; +extern void func_8013CAE8(void); +extern s32 D_801D1C28; +extern s32 D_801D1C2C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D1C08; +extern s32 D_801D1C0C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D35CA; +extern u8 D_801D363E; +extern u8 D_801D34F2; +extern u8 D_801D35AC; +extern u8 D_801D34D0; +extern u8 D_801D34F1; +extern s32 D_801D35B0; +extern void func_8013D330(void); +extern void *D_801D1BE0; +extern void *D_801D1BE4; +extern void *D_801D1BE8; +extern s32 D_801D1C10; +extern s32 D_801D1C14; +extern s32 D_801D1C18; +extern s32 D_801D3524[]; +extern u8 D_8018BC84[]; +extern u8 D_8018BD2C[]; +extern u8 D_8018BBDC[]; +extern u8 D_8018BCD8[]; +extern u8 D_8018BD58[]; +extern u8 D_8018BC30[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D1BEC; +extern s32 D_801D1C1C; +extern s32 D_801D1C20; +extern s32 D_801D1C24; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D1C04; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018C7E4; +extern s32 D_80115188; +extern s16 D_8018C7BC; +extern s16 D_8018C7BE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018C7C0; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018C49C; +extern u8 *D_8018C4A0; +extern u8 *D_8018C4A4; +extern u8 *D_8018C4A8; +extern u8 *D_8018C4AC; +extern u16 *D_8018C4B0[]; +extern u16 *D_8018C4B8[]; +extern u16 *D_8018C4D8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018C49C; + iVar2 = func_80028D58(); + puVar3 = D_8018C4B0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018C4A0; + iVar2 = func_80028DE0(); + puVar3 = D_8018C4B0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018C4A4 + 0x18) = *D_8018C4B8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018C4A8 + 0x18) = *D_8018C4B8[iVar2]; + + puVar1 = D_8018C4AC; + iVar2 = func_80028D9C(); + puVar3 = D_8018C4D8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018C3D8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018C3D8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018C3E8; +extern char *D_8018C408; +extern char *D_8018C40C; +extern char *D_8018C410; +extern char *D_8018C414; +extern char *D_8018C418; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018C3E8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018C408; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C40C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C410; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C414; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C418; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018C2A2; +extern unsigned short D_8018C2A6; +extern unsigned short D_8018C2AA; +extern unsigned short D_8018C2AE; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018C2A2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C2A6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C2AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C2AE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018C838[])(void); + +void func_80141788(void) +{ + D_8018C838[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018C844[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018C844[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018C7BC; +extern s16 D_8018C7BE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018C45C; + extern u8 D_8018C474; + extern u8 D_8018C4E8; + extern u8 D_8018C4F0; + extern void *D_801D1C38; + extern void *D_801D1C3C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D1C38 = &D_8018C45C; + D_801D1C3C = &D_8018C4E8; + } else { + D_801D1C38 = &D_8018C474; + D_801D1C3C = &D_8018C4F0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018C7BC = 0xE; + D_8018C7BE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018C7C0: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018C7C0; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018C7C0); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018C798; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018C798 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018C868[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018C868[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018C878[])(void); + +void func_801425CC(void *a0) { + D_8018C878[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018C85C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018C85C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C88C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C88C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C8A8[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C8A8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CA78[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CA78[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CB30[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CB30[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D12BC; +extern u8 D_801D1C40; +extern u8 D_801D1C41; +extern u8 D_801D1C42; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D12BC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D1C40 = mul * (local.b[0] >> 4); + D_801D1C41 = mul * (local.b[1] >> 4); + D_801D1C42 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018C880; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C880); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C89C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C89C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018CA68[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018CA68[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018CA88[]; +extern unsigned char D_8018CAE8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018CA88); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018CAE8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D12B8; +extern u8 D_801D1C40; +extern u8 D_801D1C44; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D12B8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D1C40); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D1C40, 0x10); + memcpy(&D_801D1C44, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018CC40[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018CC40[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018CD68[])(void); + +void func_80143B30(void *a0) { + D_8018CD68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018CD74[])(void); + +void func_80143C38(void *a0) { + D_8018CD74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018CD7C[])(void); + +void func_80143C98(void *a0) { + D_8018CD7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80143D28); + + +extern void (*D_8018CDC4[])(void); + +void func_80143E68(void *a0) { + D_8018CDC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018CDD8[])(void); + +void func_80144054(void *a0) { + D_8018CDD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018CDE0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018CDE0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018CD5C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018CD5C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018CD70; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CD70 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CD70 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018CD84; +extern u8 D_8018CD90; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CD84); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CD90); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018CD5C; +extern u8 D_8018CDCC; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018CD5C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018CDCC, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018CDE8[])(void); + +void func_801449C8(void *a0) { + D_8018CDE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018CDF0[])(void); + +void func_80144A2C(void *a0) { + D_8018CDF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c b/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c index 3e3b88e8d..8e885f1ae 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185CC8; -extern u8 *D_80185CCC; -extern u8 *D_80185CD0; -extern u8 *D_80185CD4; -extern u8 *D_80185CD8; -extern u16 *D_80185CDC[]; -extern u16 *D_80185CE4[]; -extern u16 *D_80185D04[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185CC8; - iVar2 = func_80028D58(); - puVar3 = D_80185CDC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185CCC; - iVar2 = func_80028DE0(); - puVar3 = D_80185CDC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185CD0 + 0x18) = *D_80185CE4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185CD4 + 0x18) = *D_80185CE4[iVar2]; - - puVar1 = D_80185CD8; - iVar2 = func_80028D9C(); - puVar3 = D_80185D04[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185C04; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185C04); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185C14; -extern char *D_80185C34; -extern char *D_80185C38; -extern char *D_80185C3C; -extern char *D_80185C40; -extern char *D_80185C44; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185C14); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185C34; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C38; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C3C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C40; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C44; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80185ACE; -extern unsigned short D_80185AD2; -extern unsigned short D_80185AD6; -extern unsigned short D_80185ADA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80185ACE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185AD2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185AD6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185ADA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186064[])(void); - -void func_80141788(void) -{ - D_80186064[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186070[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186070[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80185FE8; -extern s16 D_80185FEA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185C88; - extern u8 D_80185CA0; - extern u8 D_80185D14; - extern u8 D_80185D1C; - extern void *D_801B63B0; - extern void *D_801B63B4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B63B0 = &D_80185C88; - D_801B63B4 = &D_80185D14; - } else { - D_801B63B0 = &D_80185CA0; - D_801B63B4 = &D_80185D1C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80185FE8 = 0xE; - D_80185FEA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80185FEC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80185FEC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80185FEC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185FC4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185FC4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186094[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186094[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801860A4[])(void); - -void func_801425CC(void *a0) { - D_801860A4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186088; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186088); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801860B8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801860B8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801860D4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801860D4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801862A4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801862A4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018635C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018635C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B5AB8; -extern u8 D_801B63B8; -extern u8 D_801B63B9; -extern u8 D_801B63BA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B5AB8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B63B8 = mul * (local.b[0] >> 4); - D_801B63B9 = mul * (local.b[1] >> 4); - D_801B63BA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801860AC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801860AC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801860C8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801860C8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80186294[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80186294[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801862B4[]; -extern unsigned char D_80186314[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801862B4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80186314); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B5AB4; -extern u8 D_801B63B8; -extern u8 D_801B63BC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B5AB4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B63B8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B63B8, 0x10); - memcpy(&D_801B63BC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018646C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018646C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80186594[])(void); - -void func_80143B30(void *a0) { - D_80186594[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801865A0[])(void); - -void func_80143C38(void *a0) { - D_801865A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801865A8[])(void); - -void func_80143C98(void *a0) { - D_801865A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80143D28); - - -extern void (*D_801865F0[])(void); - -void func_80143E68(void *a0) { - D_801865F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186604[])(void); - -void func_80144054(void *a0) { - D_80186604[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018660C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018660C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80186588; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80186588, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018659C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018659C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018659C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801865B0; -extern u8 D_801865BC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801865B0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801865BC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80186588; -extern u8 D_801865F8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80186588, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801865F8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186614[])(void); - -void func_801449C8(void *a0) { - D_80186614[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018661C[])(void); - -void func_80144A2C(void *a0) { - D_8018661C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_031/ov_SC02_031_jr_80140608.c b/src/ov_SC02_031/ov_SC02_031_jr_80140608.c new file mode 100644 index 000000000..3fb34006a --- /dev/null +++ b/src/ov_SC02_031/ov_SC02_031_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B5128; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184F08[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B626C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B7AA0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B5128; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184C44)(); +extern s16 (*D_80184C48)(); +extern M2C_UNK (*D_80184C50)(); +extern s32 (*D_80184C54)(); +extern s32 D_801B6268; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B512C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80184F9C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80188480; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184FB4; +extern M2C_UNK D_80184FBC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184FC4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80184FE0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80184FEC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185000[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185050[]; +extern s16 D_80185080[]; +extern s16 D_801850E0[]; +extern s16 D_801850E8[]; +extern s16 D_80185108[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80185140[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185198[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801851E0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801851E8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801851F0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801851F8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801851A0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801851C0; +extern void func_801321B0(int param_1); +extern int D_801851D0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B62D8; +extern s32 D_801B62DC[]; +extern int D_801B62E0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185204; +extern u8 D_80185200; +extern s16 *D_80185208; +extern u8 D_8018520C; +extern int D_801B62D8; +extern u16 D_801B62E8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80185208; /* holds a pointer value (*(u16**)&D_80185208) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018521C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185270; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185274[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801852B8; +extern u8 D_801852FC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80185340[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801853B8, D_801853BA, D_801853BC, D_801853BE, D_801853C0, D_801853C2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B6350; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B6354; +extern s8 D_801B6355; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B6374; +extern s32 D_801B6368; +extern s32 D_801B636C; +extern s32 D_801B6378; +extern void func_8013CABC(void); +extern s32 D_801B6370; +extern void func_8013CAE8(void); +extern s32 D_801B63A0; +extern s32 D_801B63A4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B6380; +extern s32 D_801B6384; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B7A9A; +extern u8 D_801B7B0E; +extern u8 D_801B79C2; +extern u8 D_801B7A7C; +extern u8 D_801B79A0; +extern u8 D_801B79C1; +extern s32 D_801B7A80; +extern void func_8013D330(void); +extern void *D_801B6358; +extern void *D_801B635C; +extern void *D_801B6360; +extern s32 D_801B6388; +extern s32 D_801B638C; +extern s32 D_801B6390; +extern s32 D_801B79F4[]; +extern u8 D_801854B0[]; +extern u8 D_80185558[]; +extern u8 D_80185408[]; +extern u8 D_80185504[]; +extern u8 D_80185584[]; +extern u8 D_8018545C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B6364; +extern s32 D_801B6394; +extern s32 D_801B6398; +extern s32 D_801B639C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B637C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80186010; +extern s32 D_80115188; +extern s16 D_80185FE8; +extern s16 D_80185FEA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80185FEC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185CC8; +extern u8 *D_80185CCC; +extern u8 *D_80185CD0; +extern u8 *D_80185CD4; +extern u8 *D_80185CD8; +extern u16 *D_80185CDC[]; +extern u16 *D_80185CE4[]; +extern u16 *D_80185D04[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185CC8; + iVar2 = func_80028D58(); + puVar3 = D_80185CDC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185CCC; + iVar2 = func_80028DE0(); + puVar3 = D_80185CDC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185CD0 + 0x18) = *D_80185CE4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185CD4 + 0x18) = *D_80185CE4[iVar2]; + + puVar1 = D_80185CD8; + iVar2 = func_80028D9C(); + puVar3 = D_80185D04[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185C04; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185C04); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185C14; +extern char *D_80185C34; +extern char *D_80185C38; +extern char *D_80185C3C; +extern char *D_80185C40; +extern char *D_80185C44; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185C14); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185C34; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C38; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C3C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C40; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C44; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80185ACE; +extern unsigned short D_80185AD2; +extern unsigned short D_80185AD6; +extern unsigned short D_80185ADA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80185ACE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185AD2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185AD6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185ADA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186064[])(void); + +void func_80141788(void) +{ + D_80186064[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186070[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186070[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80185FE8; +extern s16 D_80185FEA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185C88; + extern u8 D_80185CA0; + extern u8 D_80185D14; + extern u8 D_80185D1C; + extern void *D_801B63B0; + extern void *D_801B63B4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B63B0 = &D_80185C88; + D_801B63B4 = &D_80185D14; + } else { + D_801B63B0 = &D_80185CA0; + D_801B63B4 = &D_80185D1C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80185FE8 = 0xE; + D_80185FEA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80185FEC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80185FEC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80185FEC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185FC4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185FC4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186094[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186094[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801860A4[])(void); + +void func_801425CC(void *a0) { + D_801860A4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186088; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186088); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801860B8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801860B8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801860D4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801860D4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801862A4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801862A4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018635C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018635C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B5AB8; +extern u8 D_801B63B8; +extern u8 D_801B63B9; +extern u8 D_801B63BA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B5AB8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B63B8 = mul * (local.b[0] >> 4); + D_801B63B9 = mul * (local.b[1] >> 4); + D_801B63BA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801860AC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801860AC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801860C8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801860C8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80186294[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80186294[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801862B4[]; +extern unsigned char D_80186314[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801862B4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80186314); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B5AB4; +extern u8 D_801B63B8; +extern u8 D_801B63BC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B5AB4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B63B8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B63B8, 0x10); + memcpy(&D_801B63BC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018646C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018646C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80186594[])(void); + +void func_80143B30(void *a0) { + D_80186594[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801865A0[])(void); + +void func_80143C38(void *a0) { + D_801865A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801865A8[])(void); + +void func_80143C98(void *a0) { + D_801865A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80143D28); + + +extern void (*D_801865F0[])(void); + +void func_80143E68(void *a0) { + D_801865F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186604[])(void); + +void func_80144054(void *a0) { + D_80186604[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018660C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018660C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186588; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80186588, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018659C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018659C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018659C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801865B0; +extern u8 D_801865BC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801865B0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801865BC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80186588; +extern u8 D_801865F8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80186588, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801865F8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186614[])(void); + +void func_801449C8(void *a0) { + D_80186614[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018661C[])(void); + +void func_80144A2C(void *a0) { + D_8018661C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c b/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c index 9988fbf21..dea7a5fef 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c @@ -1092,1167 +1092,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185528; -extern u8 *D_8018552C; -extern u8 *D_80185530; -extern u8 *D_80185534; -extern u8 *D_80185538; -extern u16 *D_8018553C[]; -extern u16 *D_80185544[]; -extern u16 *D_80185564[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185528; - iVar2 = func_80028D58(); - puVar3 = D_8018553C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018552C; - iVar2 = func_80028DE0(); - puVar3 = D_8018553C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185530 + 0x18) = *D_80185544[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185534 + 0x18) = *D_80185544[iVar2]; - - puVar1 = D_80185538; - iVar2 = func_80028D9C(); - puVar3 = D_80185564[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185464; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185464); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185474; -extern char *D_80185494; -extern char *D_80185498; -extern char *D_8018549C; -extern char *D_801854A0; -extern char *D_801854A4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185474); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185494; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185498; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018549C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801854A0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801854A4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018532E; -extern unsigned short D_80185332; -extern unsigned short D_80185336; -extern unsigned short D_8018533A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018532E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185332; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185336; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018533A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801858C4[])(void); - -void func_80141788(void) -{ - D_801858C4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801858D0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801858D0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80185848; -extern s16 D_8018584A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801854E8; - extern u8 D_80185500; - extern u8 D_80185574; - extern u8 D_8018557C; - extern void *D_801BD6E0; - extern void *D_801BD6E4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801BD6E0 = &D_801854E8; - D_801BD6E4 = &D_80185574; - } else { - D_801BD6E0 = &D_80185500; - D_801BD6E4 = &D_8018557C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80185848 = 0xE; - D_8018584A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018584C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018584C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018584C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185824; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185824 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801858F4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801858F4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80185904[])(void); - -void func_801425CC(void *a0) { - D_80185904[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801858E8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801858E8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185918[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185918[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185934[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185934[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185B04[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185B04[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185BBC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185BBC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801BCD80; -extern u8 D_801BD6E8; -extern u8 D_801BD6E9; -extern u8 D_801BD6EA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801BCD80; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801BD6E8 = mul * (local.b[0] >> 4); - D_801BD6E9 = mul * (local.b[1] >> 4); - D_801BD6EA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018590C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018590C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185928[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185928); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185AF4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185AF4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185B14[]; -extern unsigned char D_80185B74[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185B14); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185B74); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801BCD7C; -extern u8 D_801BD6E8; -extern u8 D_801BD6EC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801BCD7C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801BD6E8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801BD6E8, 0x10); - memcpy(&D_801BD6EC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80185CCC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80185CCC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80185DF4[])(void); - -void func_80143B30(void *a0) { - D_80185DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80185E00[])(void); - -void func_80143C38(void *a0) { - D_80185E00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80185E08[])(void); - -void func_80143C98(void *a0) { - D_80185E08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80143D28); - - -extern void (*D_80185E50[])(void); - -void func_80143E68(void *a0) { - D_80185E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80185E64[])(void); - -void func_80144054(void *a0) { - D_80185E64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80185E6C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80185E6C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80185DE8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80185DE8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80185DFC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185DFC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185DFC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80185E10; -extern u8 D_80185E1C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185E10); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185E1C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80185DE8; -extern u8 D_80185E58; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80185DE8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80185E58, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80185E74[])(void); - -void func_801449C8(void *a0) { - D_80185E74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80185E7C[])(void); - -void func_80144A2C(void *a0) { - D_80185E7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_035/ov_SC02_035_jr_80140608.c b/src/ov_SC02_035/ov_SC02_035_jr_80140608.c new file mode 100644 index 000000000..9d1e1b172 --- /dev/null +++ b/src/ov_SC02_035/ov_SC02_035_jr_80140608.c @@ -0,0 +1,2210 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801BC3F0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184768[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801BD59C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801BE9D8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801BC3F0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801844A4)(); +extern s16 (*D_801844A8)(); +extern M2C_UNK (*D_801844B0)(); +extern s32 (*D_801844B4)(); +extern s32 D_801BD598; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801BC3F4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801847FC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80187CE0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184814; +extern M2C_UNK D_8018481C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184824; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80184840[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018484C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80184860[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801848B0[]; +extern s16 D_801848E0[]; +extern s16 D_80184940[]; +extern s16 D_80184948[]; +extern s16 D_80184968[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801849A0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801849F8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80184A40[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80184A48[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80184A50[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184A58[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80184A00; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80184A20; +extern void func_801321B0(int param_1); +extern int D_80184A30; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801BD608; +extern s32 D_801BD60C[]; +extern int D_801BD610; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184A64; +extern u8 D_80184A60; +extern s16 *D_80184A68; +extern u8 D_80184A6C; +extern int D_801BD608; +extern u16 D_801BD618; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184A68; /* holds a pointer value (*(u16**)&D_80184A68) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80184A7C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184AD0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184AD4[])(void); +extern void func_80138C30(void * a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184B18; +extern u8 D_80184B5C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184BA0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80184C18, D_80184C1A, D_80184C1C, D_80184C1E, D_80184C20, D_80184C22; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801BD680; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801BD684; +extern s8 D_801BD685; +extern void func_8013C9C4(void * arg0); +extern s32 D_801BD6A4; +extern s32 D_801BD698; +extern s32 D_801BD69C; +extern s32 D_801BD6A8; +extern void func_8013CABC(void); +extern s32 D_801BD6A0; +extern void func_8013CAE8(void); +extern s32 D_801BD6D0; +extern s32 D_801BD6D4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801BD6B0; +extern s32 D_801BD6B4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801BE9D2; +extern u8 D_801BEA46; +extern u8 D_801BE8FA; +extern u8 D_801BE9B4; +extern u8 D_801BE8D8; +extern u8 D_801BE8F9; +extern s32 D_801BE9B8; +extern void func_8013D330(void); +extern void *D_801BD688; +extern void *D_801BD68C; +extern void *D_801BD690; +extern s32 D_801BD6B8; +extern s32 D_801BD6BC; +extern s32 D_801BD6C0; +extern s32 D_801BE92C[]; +extern u8 D_80184D10[]; +extern u8 D_80184DB8[]; +extern u8 D_80184C68[]; +extern u8 D_80184D64[]; +extern u8 D_80184DE4[]; +extern u8 D_80184CBC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801BD694; +extern s32 D_801BD6C4; +extern s32 D_801BD6C8; +extern s32 D_801BD6CC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801BD6AC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80185870; +extern s32 D_80115188; +extern s16 D_80185848; +extern s16 D_8018584A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018584C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185528; +extern u8 *D_8018552C; +extern u8 *D_80185530; +extern u8 *D_80185534; +extern u8 *D_80185538; +extern u16 *D_8018553C[]; +extern u16 *D_80185544[]; +extern u16 *D_80185564[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185528; + iVar2 = func_80028D58(); + puVar3 = D_8018553C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018552C; + iVar2 = func_80028DE0(); + puVar3 = D_8018553C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185530 + 0x18) = *D_80185544[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185534 + 0x18) = *D_80185544[iVar2]; + + puVar1 = D_80185538; + iVar2 = func_80028D9C(); + puVar3 = D_80185564[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185464; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185464); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185474; +extern char *D_80185494; +extern char *D_80185498; +extern char *D_8018549C; +extern char *D_801854A0; +extern char *D_801854A4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185474); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185494; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185498; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018549C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801854A0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801854A4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018532E; +extern unsigned short D_80185332; +extern unsigned short D_80185336; +extern unsigned short D_8018533A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018532E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185332; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185336; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018533A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801858C4[])(void); + +void func_80141788(void) +{ + D_801858C4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801858D0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801858D0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80185848; +extern s16 D_8018584A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801854E8; + extern u8 D_80185500; + extern u8 D_80185574; + extern u8 D_8018557C; + extern void *D_801BD6E0; + extern void *D_801BD6E4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801BD6E0 = &D_801854E8; + D_801BD6E4 = &D_80185574; + } else { + D_801BD6E0 = &D_80185500; + D_801BD6E4 = &D_8018557C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80185848 = 0xE; + D_8018584A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018584C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018584C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018584C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185824; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185824 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801858F4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801858F4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80185904[])(void); + +void func_801425CC(void *a0) { + D_80185904[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801858E8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801858E8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185918[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185918[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185934[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185934[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185B04[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185B04[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185BBC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185BBC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801BCD80; +extern u8 D_801BD6E8; +extern u8 D_801BD6E9; +extern u8 D_801BD6EA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801BCD80; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801BD6E8 = mul * (local.b[0] >> 4); + D_801BD6E9 = mul * (local.b[1] >> 4); + D_801BD6EA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018590C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018590C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185928[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185928); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185AF4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185AF4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185B14[]; +extern unsigned char D_80185B74[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185B14); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185B74); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801BCD7C; +extern u8 D_801BD6E8; +extern u8 D_801BD6EC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801BCD7C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801BD6E8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801BD6E8, 0x10); + memcpy(&D_801BD6EC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80185CCC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80185CCC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80185DF4[])(void); + +void func_80143B30(void *a0) { + D_80185DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80185E00[])(void); + +void func_80143C38(void *a0) { + D_80185E00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80185E08[])(void); + +void func_80143C98(void *a0) { + D_80185E08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80143D28); + + +extern void (*D_80185E50[])(void); + +void func_80143E68(void *a0) { + D_80185E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80185E64[])(void); + +void func_80144054(void *a0) { + D_80185E64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80185E6C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80185E6C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185DE8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80185DE8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80185DFC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185DFC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185DFC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80185E10; +extern u8 D_80185E1C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185E10); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185E1C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80185DE8; +extern u8 D_80185E58; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80185DE8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80185E58, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80185E74[])(void); + +void func_801449C8(void *a0) { + D_80185E74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80185E7C[])(void); + +void func_80144A2C(void *a0) { + D_80185E7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c b/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c index 19621d722..129eacb12 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80180154; -extern u8 *D_80180158; -extern u8 *D_8018015C; -extern u8 *D_80180160; -extern u8 *D_80180164; -extern u16 *D_80180168[]; -extern u16 *D_80180170[]; -extern u16 *D_80180190[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80180154; - iVar2 = func_80028D58(); - puVar3 = D_80180168[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80180158; - iVar2 = func_80028DE0(); - puVar3 = D_80180168[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018015C + 0x18) = *D_80180170[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80180160 + 0x18) = *D_80180170[iVar2]; - - puVar1 = D_80180164; - iVar2 = func_80028D9C(); - puVar3 = D_80180190[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180090; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180090); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801800A0; -extern char *D_801800C0; -extern char *D_801800C4; -extern char *D_801800C8; -extern char *D_801800CC; -extern char *D_801800D0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801800A0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801800C0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801800C4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801800C8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801800CC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801800D0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017FF5A; -extern unsigned short D_8017FF5E; -extern unsigned short D_8017FF62; -extern unsigned short D_8017FF66; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017FF5A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FF5E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FF62; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FF66; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801804F0[])(void); - -void func_80141788(void) -{ - D_801804F0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801804FC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801804FC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80180474; -extern s16 D_80180476; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180114; - extern u8 D_8018012C; - extern u8 D_801801A0; - extern u8 D_801801A8; - extern void *D_8019FA90; - extern void *D_8019FA94; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019FA90 = &D_80180114; - D_8019FA94 = &D_801801A0; - } else { - D_8019FA90 = &D_8018012C; - D_8019FA94 = &D_801801A8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80180474 = 0xE; - D_80180476 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80180478: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80180478; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80180478); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80180450; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80180450 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80180520[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80180520[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80180530[])(void); - -void func_801425CC(void *a0) { - D_80180530[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180514; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180514); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180544[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180544[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180560[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180560[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180730[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180730[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801807E8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801807E8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019F16C; -extern u8 D_8019FA98; -extern u8 D_8019FA99; -extern u8 D_8019FA9A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019F16C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019FA98 = mul * (local.b[0] >> 4); - D_8019FA99 = mul * (local.b[1] >> 4); - D_8019FA9A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180538; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180538); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180554[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180554); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80180720[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80180720[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180740[]; -extern unsigned char D_801807A0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180740); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801807A0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019F168; -extern u8 D_8019FA98; -extern u8 D_8019FA9C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019F168, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019FA98); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019FA98, 0x10); - memcpy(&D_8019FA9C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801808F8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801808F8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180A20[])(void); - -void func_80143B30(void *a0) { - D_80180A20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180A2C[])(void); - -void func_80143C38(void *a0) { - D_80180A2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180A34[])(void); - -void func_80143C98(void *a0) { - D_80180A34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180A7C[])(void); - -void func_80143E68(void *a0) { - D_80180A7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180A90[])(void); - -void func_80144054(void *a0) { - D_80180A90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180A98[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180A98[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180A14; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180A14, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180A28; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180A28 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180A28 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180A3C; -extern u8 D_80180A48; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180A3C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180A48); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180A14; -extern u8 D_80180A84; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180A14, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180A84, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180AA0[])(void); - -void func_801449C8(void *a0) { - D_80180AA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180AA8[])(void); - -void func_80144A2C(void *a0) { - D_80180AA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_039/ov_SC02_039_jr_80140608.c b/src/ov_SC02_039/ov_SC02_039_jr_80140608.c new file mode 100644 index 000000000..4586a437f --- /dev/null +++ b/src/ov_SC02_039/ov_SC02_039_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019E7DC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F394[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019F94C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A0D90; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019E7DC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F0D0)(); +extern s16 (*D_8017F0D4)(); +extern M2C_UNK (*D_8017F0DC)(); +extern s32 (*D_8017F0E0)(); +extern s32 D_8019F948; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019E7E0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F428; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018290C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F440; +extern M2C_UNK D_8017F448; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F450; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F46C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F478[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F48C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F4DC[]; +extern s16 D_8017F50C[]; +extern s16 D_8017F56C[]; +extern s16 D_8017F574[]; +extern s16 D_8017F594[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F5CC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F624[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F66C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F674[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F67C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F684[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F62C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F64C; +extern void func_801321B0(int param_1); +extern int D_8017F65C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019F9B8; +extern s32 D_8019F9BC[]; +extern int D_8019F9C0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F690; +extern u8 D_8017F68C; +extern s16 *D_8017F694; +extern u8 D_8017F698; +extern int D_8019F9B8; +extern u16 D_8019F9C8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F694; /* holds a pointer value (*(u16**)&D_8017F694) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F6A8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F6FC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F700[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F744; +extern u8 D_8017F788; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F7CC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F844, D_8017F846, D_8017F848, D_8017F84A, D_8017F84C, D_8017F84E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019FA30; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019FA34; +extern s8 D_8019FA35; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019FA54; +extern s32 D_8019FA48; +extern s32 D_8019FA4C; +extern s32 D_8019FA58; +extern void func_8013CABC(void); +extern s32 D_8019FA50; +extern void func_8013CAE8(void); +extern s32 D_8019FA80; +extern s32 D_8019FA84; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019FA60; +extern s32 D_8019FA64; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A0D8A; +extern u8 D_801A0DFE; +extern u8 D_801A0CB2; +extern u8 D_801A0D6C; +extern u8 D_801A0C90; +extern u8 D_801A0CB1; +extern s32 D_801A0D70; +extern void func_8013D330(void); +extern void *D_8019FA38; +extern void *D_8019FA3C; +extern void *D_8019FA40; +extern s32 D_8019FA68; +extern s32 D_8019FA6C; +extern s32 D_8019FA70; +extern s32 D_801A0CE4[]; +extern u8 D_8017F93C[]; +extern u8 D_8017F9E4[]; +extern u8 D_8017F894[]; +extern u8 D_8017F990[]; +extern u8 D_8017FA10[]; +extern u8 D_8017F8E8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019FA44; +extern s32 D_8019FA74; +extern s32 D_8019FA78; +extern s32 D_8019FA7C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019FA5C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018049C; +extern s32 D_80115188; +extern s16 D_80180474; +extern s16 D_80180476; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80180478; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80180154; +extern u8 *D_80180158; +extern u8 *D_8018015C; +extern u8 *D_80180160; +extern u8 *D_80180164; +extern u16 *D_80180168[]; +extern u16 *D_80180170[]; +extern u16 *D_80180190[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80180154; + iVar2 = func_80028D58(); + puVar3 = D_80180168[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80180158; + iVar2 = func_80028DE0(); + puVar3 = D_80180168[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018015C + 0x18) = *D_80180170[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80180160 + 0x18) = *D_80180170[iVar2]; + + puVar1 = D_80180164; + iVar2 = func_80028D9C(); + puVar3 = D_80180190[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180090; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180090); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801800A0; +extern char *D_801800C0; +extern char *D_801800C4; +extern char *D_801800C8; +extern char *D_801800CC; +extern char *D_801800D0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801800A0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801800C0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801800C4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801800C8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801800CC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801800D0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017FF5A; +extern unsigned short D_8017FF5E; +extern unsigned short D_8017FF62; +extern unsigned short D_8017FF66; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017FF5A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FF5E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FF62; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FF66; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801804F0[])(void); + +void func_80141788(void) +{ + D_801804F0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801804FC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801804FC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80180474; +extern s16 D_80180476; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180114; + extern u8 D_8018012C; + extern u8 D_801801A0; + extern u8 D_801801A8; + extern void *D_8019FA90; + extern void *D_8019FA94; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019FA90 = &D_80180114; + D_8019FA94 = &D_801801A0; + } else { + D_8019FA90 = &D_8018012C; + D_8019FA94 = &D_801801A8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80180474 = 0xE; + D_80180476 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80180478: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80180478; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80180478); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80180450; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80180450 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80180520[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80180520[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80180530[])(void); + +void func_801425CC(void *a0) { + D_80180530[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180514; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180514); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180544[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180544[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180560[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180560[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180730[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180730[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801807E8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801807E8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019F16C; +extern u8 D_8019FA98; +extern u8 D_8019FA99; +extern u8 D_8019FA9A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019F16C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019FA98 = mul * (local.b[0] >> 4); + D_8019FA99 = mul * (local.b[1] >> 4); + D_8019FA9A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180538; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180538); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180554[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180554); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80180720[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80180720[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180740[]; +extern unsigned char D_801807A0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180740); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801807A0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019F168; +extern u8 D_8019FA98; +extern u8 D_8019FA9C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019F168, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019FA98); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019FA98, 0x10); + memcpy(&D_8019FA9C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801808F8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801808F8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180A20[])(void); + +void func_80143B30(void *a0) { + D_80180A20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180A2C[])(void); + +void func_80143C38(void *a0) { + D_80180A2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180A34[])(void); + +void func_80143C98(void *a0) { + D_80180A34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80143D28); + + +extern void (*D_80180A7C[])(void); + +void func_80143E68(void *a0) { + D_80180A7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180A90[])(void); + +void func_80144054(void *a0) { + D_80180A90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180A98[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180A98[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180A14; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180A14, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180A28; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180A28 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180A28 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180A3C; +extern u8 D_80180A48; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180A3C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180A48); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180A14; +extern u8 D_80180A84; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180A14, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180A84, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180AA0[])(void); + +void func_801449C8(void *a0) { + D_80180AA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180AA8[])(void); + +void func_80144A2C(void *a0) { + D_80180AA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c b/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c index a5c412491..4b71cf39e 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185E24; -extern u8 *D_80185E28; -extern u8 *D_80185E2C; -extern u8 *D_80185E30; -extern u8 *D_80185E34; -extern u16 *D_80185E38[]; -extern u16 *D_80185E40[]; -extern u16 *D_80185E60[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185E24; - iVar2 = func_80028D58(); - puVar3 = D_80185E38[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185E28; - iVar2 = func_80028DE0(); - puVar3 = D_80185E38[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185E2C + 0x18) = *D_80185E40[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185E30 + 0x18) = *D_80185E40[iVar2]; - - puVar1 = D_80185E34; - iVar2 = func_80028D9C(); - puVar3 = D_80185E60[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185D60; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185D60); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185D70; -extern char *D_80185D90; -extern char *D_80185D94; -extern char *D_80185D98; -extern char *D_80185D9C; -extern char *D_80185DA0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185D70); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185D90; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185D94; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185D98; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185D9C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185DA0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80185C2A; -extern unsigned short D_80185C2E; -extern unsigned short D_80185C32; -extern unsigned short D_80185C36; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80185C2A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185C2E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185C32; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185C36; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801861C0[])(void); - -void func_80141788(void) -{ - D_801861C0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801861CC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801861CC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186144; -extern s16 D_80186146; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185DE4; - extern u8 D_80185DFC; - extern u8 D_80185E70; - extern u8 D_80185E78; - extern void *D_801B7E08; - extern void *D_801B7E0C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B7E08 = &D_80185DE4; - D_801B7E0C = &D_80185E70; - } else { - D_801B7E08 = &D_80185DFC; - D_801B7E0C = &D_80185E78; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186144 = 0xE; - D_80186146 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186148: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186148; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186148); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186120; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186120 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801861F0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801861F0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186200[])(void); - -void func_801425CC(void *a0) { - D_80186200[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801861E4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801861E4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186214[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186214[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186230[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186230[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186400[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186400[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801864B8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801864B8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B74D8; -extern u8 D_801B7E10; -extern u8 D_801B7E11; -extern u8 D_801B7E12; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B74D8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B7E10 = mul * (local.b[0] >> 4); - D_801B7E11 = mul * (local.b[1] >> 4); - D_801B7E12 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80186208; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186208); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186224[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186224); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801863F0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801863F0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186410[]; -extern unsigned char D_80186470[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186410); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80186470); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B74D4; -extern u8 D_801B7E10; -extern u8 D_801B7E14; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B74D4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B7E10); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B7E10, 0x10); - memcpy(&D_801B7E14, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801865C8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801865C8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801866F0[])(void); - -void func_80143B30(void *a0) { - D_801866F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801866FC[])(void); - -void func_80143C38(void *a0) { - D_801866FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80186704[])(void); - -void func_80143C98(void *a0) { - D_80186704[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018674C[])(void); - -void func_80143E68(void *a0) { - D_8018674C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186760[])(void); - -void func_80144054(void *a0) { - D_80186760[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80186768[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80186768[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801866E4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801866E4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801866F8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801866F8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801866F8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018670C; -extern u8 D_80186718; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018670C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186718); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801866E4; -extern u8 D_80186754; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801866E4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186754, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186770[])(void); - -void func_801449C8(void *a0) { - D_80186770[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186778[])(void); - -void func_80144A2C(void *a0) { - D_80186778[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC02_041/ov_SC02_041_jr_80140608.c b/src/ov_SC02_041/ov_SC02_041_jr_80140608.c new file mode 100644 index 000000000..092b2c37f --- /dev/null +++ b/src/ov_SC02_041/ov_SC02_041_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B6B48; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80185064[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B7CC4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B9668; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B6B48; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184DA0)(); +extern s16 (*D_80184DA4)(); +extern M2C_UNK (*D_80184DAC)(); +extern s32 (*D_80184DB0)(); +extern s32 D_801B7CC0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B6B4C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801850F8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801885DC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185110; +extern M2C_UNK D_80185118; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185120; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018513C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185148[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018515C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801851AC[]; +extern s16 D_801851DC[]; +extern s16 D_8018523C[]; +extern s16 D_80185244[]; +extern s16 D_80185264[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018529C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801852F4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018533C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185344[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018534C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80185354[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801852FC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018531C; +extern void func_801321B0(int param_1); +extern int D_8018532C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B7D30; +extern s32 D_801B7D34[]; +extern int D_801B7D38; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185360; +extern u8 D_8018535C; +extern s16 *D_80185364; +extern u8 D_80185368; +extern int D_801B7D30; +extern u16 D_801B7D40; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80185364; /* holds a pointer value (*(u16**)&D_80185364) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80185378[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801853CC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801853D0[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80185414; +extern u8 D_80185458; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018549C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185514, D_80185516, D_80185518, D_8018551A, D_8018551C, D_8018551E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B7DA8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B7DAC; +extern s8 D_801B7DAD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B7DCC; +extern s32 D_801B7DC0; +extern s32 D_801B7DC4; +extern s32 D_801B7DD0; +extern void func_8013CABC(void); +extern s32 D_801B7DC8; +extern void func_8013CAE8(void); +extern s32 D_801B7DF8; +extern s32 D_801B7DFC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B7DD8; +extern s32 D_801B7DDC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B9662; +extern u8 D_801B96D6; +extern u8 D_801B958A; +extern u8 D_801B9644; +extern u8 D_801B9568; +extern u8 D_801B9589; +extern s32 D_801B9648; +extern void func_8013D330(void); +extern void *D_801B7DB0; +extern void *D_801B7DB4; +extern void *D_801B7DB8; +extern s32 D_801B7DE0; +extern s32 D_801B7DE4; +extern s32 D_801B7DE8; +extern s32 D_801B95BC[]; +extern u8 D_8018560C[]; +extern u8 D_801856B4[]; +extern u8 D_80185564[]; +extern u8 D_80185660[]; +extern u8 D_801856E0[]; +extern u8 D_801855B8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B7DBC; +extern s32 D_801B7DEC; +extern s32 D_801B7DF0; +extern s32 D_801B7DF4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B7DD4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018616C; +extern s32 D_80115188; +extern s16 D_80186144; +extern s16 D_80186146; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186148; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185E24; +extern u8 *D_80185E28; +extern u8 *D_80185E2C; +extern u8 *D_80185E30; +extern u8 *D_80185E34; +extern u16 *D_80185E38[]; +extern u16 *D_80185E40[]; +extern u16 *D_80185E60[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185E24; + iVar2 = func_80028D58(); + puVar3 = D_80185E38[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185E28; + iVar2 = func_80028DE0(); + puVar3 = D_80185E38[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185E2C + 0x18) = *D_80185E40[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185E30 + 0x18) = *D_80185E40[iVar2]; + + puVar1 = D_80185E34; + iVar2 = func_80028D9C(); + puVar3 = D_80185E60[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185D60; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185D60); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185D70; +extern char *D_80185D90; +extern char *D_80185D94; +extern char *D_80185D98; +extern char *D_80185D9C; +extern char *D_80185DA0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185D70); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185D90; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185D94; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185D98; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185D9C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185DA0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80185C2A; +extern unsigned short D_80185C2E; +extern unsigned short D_80185C32; +extern unsigned short D_80185C36; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80185C2A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185C2E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185C32; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185C36; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801861C0[])(void); + +void func_80141788(void) +{ + D_801861C0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801861CC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801861CC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186144; +extern s16 D_80186146; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185DE4; + extern u8 D_80185DFC; + extern u8 D_80185E70; + extern u8 D_80185E78; + extern void *D_801B7E08; + extern void *D_801B7E0C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B7E08 = &D_80185DE4; + D_801B7E0C = &D_80185E70; + } else { + D_801B7E08 = &D_80185DFC; + D_801B7E0C = &D_80185E78; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186144 = 0xE; + D_80186146 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186148: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186148; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186148); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186120; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186120 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801861F0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801861F0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186200[])(void); + +void func_801425CC(void *a0) { + D_80186200[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801861E4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801861E4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186214[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186214[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186230[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186230[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186400[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186400[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801864B8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801864B8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B74D8; +extern u8 D_801B7E10; +extern u8 D_801B7E11; +extern u8 D_801B7E12; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B74D8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B7E10 = mul * (local.b[0] >> 4); + D_801B7E11 = mul * (local.b[1] >> 4); + D_801B7E12 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80186208; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186208); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186224[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186224); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801863F0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801863F0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186410[]; +extern unsigned char D_80186470[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186410); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80186470); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B74D4; +extern u8 D_801B7E10; +extern u8 D_801B7E14; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B74D4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B7E10); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B7E10, 0x10); + memcpy(&D_801B7E14, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801865C8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801865C8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801866F0[])(void); + +void func_80143B30(void *a0) { + D_801866F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801866FC[])(void); + +void func_80143C38(void *a0) { + D_801866FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80186704[])(void); + +void func_80143C98(void *a0) { + D_80186704[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80143D28); + + +extern void (*D_8018674C[])(void); + +void func_80143E68(void *a0) { + D_8018674C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186760[])(void); + +void func_80144054(void *a0) { + D_80186760[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80186768[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80186768[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801866E4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801866E4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801866F8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801866F8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801866F8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018670C; +extern u8 D_80186718; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018670C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186718); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801866E4; +extern u8 D_80186754; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801866E4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186754, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186770[])(void); + +void func_801449C8(void *a0) { + D_80186770[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186778[])(void); + +void func_80144A2C(void *a0) { + D_80186778[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8013FFD8.c b/src/ov_SC03_001/ov_SC03_001_jr_8013FFD8.c index 6c1de043c..6eaaf54ed 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_8013FFD8.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018E564; -extern u8 *D_8018E568; -extern u8 *D_8018E56C; -extern u8 *D_8018E570; -extern u8 *D_8018E574; -extern u16 *D_8018E578[]; -extern u16 *D_8018E580[]; -extern u16 *D_8018E5A0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018E564; - iVar2 = func_80028D58(); - puVar3 = D_8018E578[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018E568; - iVar2 = func_80028DE0(); - puVar3 = D_8018E578[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018E56C + 0x18) = *D_8018E580[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018E570 + 0x18) = *D_8018E580[iVar2]; - - puVar1 = D_8018E574; - iVar2 = func_80028D9C(); - puVar3 = D_8018E5A0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018E4A0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018E4A0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018E4B0; -extern char *D_8018E4D0; -extern char *D_8018E4D4; -extern char *D_8018E4D8; -extern char *D_8018E4DC; -extern char *D_8018E4E0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018E4B0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018E4D0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E4D4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E4D8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E4DC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E4E0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018E36A; -extern unsigned short D_8018E36E; -extern unsigned short D_8018E372; -extern unsigned short D_8018E376; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018E36A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E36E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E372; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E376; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018E900[])(void); - -void func_80141788(void) -{ - D_8018E900[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018E90C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018E90C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018E884; -extern s16 D_8018E886; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018E524; - extern u8 D_8018E53C; - extern u8 D_8018E5B0; - extern u8 D_8018E5B8; - extern void *D_801ED488; - extern void *D_801ED48C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801ED488 = &D_8018E524; - D_801ED48C = &D_8018E5B0; - } else { - D_801ED488 = &D_8018E53C; - D_801ED48C = &D_8018E5B8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018E884 = 0xE; - D_8018E886 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018E888: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018E888; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018E888); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018E860; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018E860 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018E930[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018E930[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018E940[])(void); - -void func_801425CC(void *a0) { - D_8018E940[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018E924; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018E924); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E954[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E954[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E970[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E970[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018EB40[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018EB40[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018EBF8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018EBF8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801EC5F8; -extern u8 D_801ED490; -extern u8 D_801ED491; -extern u8 D_801ED492; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801EC5F8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801ED490 = mul * (local.b[0] >> 4); - D_801ED491 = mul * (local.b[1] >> 4); - D_801ED492 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018E948; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E948); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E964[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E964); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018EB30[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018EB30[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018EB50[]; -extern unsigned char D_8018EBB0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018EB50); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018EBB0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801EC5F4; -extern u8 D_801ED490; -extern u8 D_801ED494; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801EC5F4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801ED490); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801ED490, 0x10); - memcpy(&D_801ED494, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018ED08[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018ED08[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018EE30[])(void); - -void func_80143B30(void *a0) { - D_8018EE30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018EE3C[])(void); - -void func_80143C38(void *a0) { - D_8018EE3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018EE44[])(void); - -void func_80143C98(void *a0) { - D_8018EE44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018EE8C[])(void); - -void func_80143E68(void *a0) { - D_8018EE8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018EEA0[])(void); - -void func_80144054(void *a0) { - D_8018EEA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018EEA8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018EEA8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018EE24; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018EE24, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018EE38; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EE38 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EE38 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018EE4C; -extern u8 D_8018EE58; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EE4C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EE58); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018EE24; -extern u8 D_8018EE94; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018EE24, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018EE94, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018EEB0[])(void); - -void func_801449C8(void *a0) { - D_8018EEB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018EEB8[])(void); - -void func_80144A2C(void *a0) { - D_8018EEB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_001/ov_SC03_001_jr_80140608.c b/src/ov_SC03_001/ov_SC03_001_jr_80140608.c new file mode 100644 index 000000000..088f33051 --- /dev/null +++ b/src/ov_SC03_001/ov_SC03_001_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801EBC68; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018D7A4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801ED344; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801EF3F8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801EBC68; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018D4D8)(); +extern s16 (*D_8018D4DC)(); +extern M2C_UNK (*D_8018D4E4)(); +extern s32 (*D_8018D4E8)(); +extern s32 D_801ED340; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801EBC6C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018D838; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80190D1C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018D850; +extern M2C_UNK D_8018D858; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018D860; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018D87C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018D888[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018D89C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018D8EC[]; +extern s16 D_8018D91C[]; +extern s16 D_8018D97C[]; +extern s16 D_8018D984[]; +extern s16 D_8018D9A4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018D9DC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018DA34[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018DA7C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018DA84[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018DA8C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018DA94[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018DA3C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018DA5C; +extern void func_801321B0(int param_1); +extern int D_8018DA6C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801ED3B0; +extern s32 D_801ED3B4[]; +extern int D_801ED3B8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018DAA0; +extern u8 D_8018DA9C; +extern s16 *D_8018DAA4; +extern u8 D_8018DAA8; +extern int D_801ED3B0; +extern u16 D_801ED3C0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018DAA4; /* holds a pointer value (*(u16**)&D_8018DAA4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018DAB8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018DB0C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018DB10[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018DB54; +extern u8 D_8018DB98; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018DBDC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018DC54, D_8018DC56, D_8018DC58, D_8018DC5A, D_8018DC5C, D_8018DC5E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801ED428; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801ED42C; +extern s8 D_801ED42D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801ED44C; +extern s32 D_801ED440; +extern s32 D_801ED444; +extern s32 D_801ED450; +extern void func_8013CABC(void); +extern s32 D_801ED448; +extern void func_8013CAE8(void); +extern s32 D_801ED478; +extern s32 D_801ED47C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801ED458; +extern s32 D_801ED45C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801EF3F2; +extern u8 D_801EF466; +extern u8 D_801EF2F2; +extern u8 D_801EF3BC; +extern u8 D_801EF2C8; +extern u8 D_801EF2F1; +extern s32 D_801EF3C0; +extern void func_8013D330(void); +extern void *D_801ED430; +extern void *D_801ED434; +extern void *D_801ED438; +extern s32 D_801ED460; +extern s32 D_801ED464; +extern s32 D_801ED468; +extern s32 D_801EF334[]; +extern u8 D_8018DD4C[]; +extern u8 D_8018DDF4[]; +extern u8 D_8018DCA4[]; +extern u8 D_8018DDA0[]; +extern u8 D_8018DE20[]; +extern u8 D_8018DCF8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801ED43C; +extern s32 D_801ED46C; +extern s32 D_801ED470; +extern s32 D_801ED474; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801ED454; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018E8AC; +extern s32 D_80115188; +extern s16 D_8018E884; +extern s16 D_8018E886; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018E888; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018E564; +extern u8 *D_8018E568; +extern u8 *D_8018E56C; +extern u8 *D_8018E570; +extern u8 *D_8018E574; +extern u16 *D_8018E578[]; +extern u16 *D_8018E580[]; +extern u16 *D_8018E5A0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018E564; + iVar2 = func_80028D58(); + puVar3 = D_8018E578[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018E568; + iVar2 = func_80028DE0(); + puVar3 = D_8018E578[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018E56C + 0x18) = *D_8018E580[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018E570 + 0x18) = *D_8018E580[iVar2]; + + puVar1 = D_8018E574; + iVar2 = func_80028D9C(); + puVar3 = D_8018E5A0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018E4A0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018E4A0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018E4B0; +extern char *D_8018E4D0; +extern char *D_8018E4D4; +extern char *D_8018E4D8; +extern char *D_8018E4DC; +extern char *D_8018E4E0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018E4B0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018E4D0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E4D4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E4D8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E4DC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E4E0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018E36A; +extern unsigned short D_8018E36E; +extern unsigned short D_8018E372; +extern unsigned short D_8018E376; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018E36A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E36E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E372; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E376; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018E900[])(void); + +void func_80141788(void) +{ + D_8018E900[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018E90C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018E90C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018E884; +extern s16 D_8018E886; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018E524; + extern u8 D_8018E53C; + extern u8 D_8018E5B0; + extern u8 D_8018E5B8; + extern void *D_801ED488; + extern void *D_801ED48C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801ED488 = &D_8018E524; + D_801ED48C = &D_8018E5B0; + } else { + D_801ED488 = &D_8018E53C; + D_801ED48C = &D_8018E5B8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018E884 = 0xE; + D_8018E886 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018E888: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018E888; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018E888); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018E860; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018E860 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018E930[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018E930[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018E940[])(void); + +void func_801425CC(void *a0) { + D_8018E940[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018E924; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018E924); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E954[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E954[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E970[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E970[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018EB40[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018EB40[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018EBF8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018EBF8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801EC5F8; +extern u8 D_801ED490; +extern u8 D_801ED491; +extern u8 D_801ED492; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801EC5F8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801ED490 = mul * (local.b[0] >> 4); + D_801ED491 = mul * (local.b[1] >> 4); + D_801ED492 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018E948; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E948); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E964[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E964); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018EB30[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018EB30[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018EB50[]; +extern unsigned char D_8018EBB0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018EB50); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018EBB0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801EC5F4; +extern u8 D_801ED490; +extern u8 D_801ED494; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801EC5F4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801ED490); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801ED490, 0x10); + memcpy(&D_801ED494, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018ED08[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018ED08[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018EE30[])(void); + +void func_80143B30(void *a0) { + D_8018EE30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018EE3C[])(void); + +void func_80143C38(void *a0) { + D_8018EE3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018EE44[])(void); + +void func_80143C98(void *a0) { + D_8018EE44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80143D28); + + +extern void (*D_8018EE8C[])(void); + +void func_80143E68(void *a0) { + D_8018EE8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018EEA0[])(void); + +void func_80144054(void *a0) { + D_8018EEA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018EEA8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018EEA8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EE24; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018EE24, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018EE38; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EE38 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EE38 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018EE4C; +extern u8 D_8018EE58; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EE4C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EE58); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018EE24; +extern u8 D_8018EE94; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018EE24, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018EE94, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018EEB0[])(void); + +void func_801449C8(void *a0) { + D_8018EEB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018EEB8[])(void); + +void func_80144A2C(void *a0) { + D_8018EEB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8013FFD8.c b/src/ov_SC03_002/ov_SC03_002_jr_8013FFD8.c index 847edbeaa..aa8d4fe2f 100644 --- a/src/ov_SC03_002/ov_SC03_002_jr_8013FFD8.c +++ b/src/ov_SC03_002/ov_SC03_002_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80186554; -extern u8 *D_80186558; -extern u8 *D_8018655C; -extern u8 *D_80186560; -extern u8 *D_80186564; -extern u16 *D_80186568[]; -extern u16 *D_80186570[]; -extern u16 *D_80186590[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80186554; - iVar2 = func_80028D58(); - puVar3 = D_80186568[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80186558; - iVar2 = func_80028DE0(); - puVar3 = D_80186568[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018655C + 0x18) = *D_80186570[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80186560 + 0x18) = *D_80186570[iVar2]; - - puVar1 = D_80186564; - iVar2 = func_80028D9C(); - puVar3 = D_80186590[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80186490; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80186490); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801864A0; -extern char *D_801864C0; -extern char *D_801864C4; -extern char *D_801864C8; -extern char *D_801864CC; -extern char *D_801864D0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801864A0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801864C0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801864C4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801864C8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801864CC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801864D0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018635A; -extern unsigned short D_8018635E; -extern unsigned short D_80186362; -extern unsigned short D_80186366; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018635A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018635E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186362; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186366; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801868F0[])(void); - -void func_80141788(void) -{ - D_801868F0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801868FC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801868FC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186874; -extern s16 D_80186876; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186514; - extern u8 D_8018652C; - extern u8 D_801865A0; - extern u8 D_801865A8; - extern void *D_801CA508; - extern void *D_801CA50C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CA508 = &D_80186514; - D_801CA50C = &D_801865A0; - } else { - D_801CA508 = &D_8018652C; - D_801CA50C = &D_801865A8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186874 = 0xE; - D_80186876 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186878: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186878; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186878); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186850; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186850 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186920[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186920[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186930[])(void); - -void func_801425CC(void *a0) { - D_80186930[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186914; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186914); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186944[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186944[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186960[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186960[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186B30[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186B30[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186BE8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186BE8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C9B54; -extern u8 D_801CA510; -extern u8 D_801CA511; -extern u8 D_801CA512; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C9B54; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CA510 = mul * (local.b[0] >> 4); - D_801CA511 = mul * (local.b[1] >> 4); - D_801CA512 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80186938; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186938); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186954[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186954); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80186B20[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80186B20[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186B40[]; -extern unsigned char D_80186BA0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186B40); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80186BA0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C9B50; -extern u8 D_801CA510; -extern u8 D_801CA514; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C9B50, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CA510); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CA510, 0x10); - memcpy(&D_801CA514, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80186CF8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80186CF8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80186E20[])(void); - -void func_80143B30(void *a0) { - D_80186E20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80186E2C[])(void); - -void func_80143C38(void *a0) { - D_80186E2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80186E34[])(void); - -void func_80143C98(void *a0) { - D_80186E34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80143D28); - - -extern void (*D_80186E7C[])(void); - -void func_80143E68(void *a0) { - D_80186E7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186E90[])(void); - -void func_80144054(void *a0) { - D_80186E90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80186E98[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80186E98[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80186E14; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80186E14, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80186E28; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186E28 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186E28 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80186E3C; -extern u8 D_80186E48; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186E3C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186E48); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80186E14; -extern u8 D_80186E84; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80186E14, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186E84, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186EA0[])(void); - -void func_801449C8(void *a0) { - D_80186EA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186EA8[])(void); - -void func_80144A2C(void *a0) { - D_80186EA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_002/ov_SC03_002_jr_80140608.c b/src/ov_SC03_002/ov_SC03_002_jr_80140608.c new file mode 100644 index 000000000..fe31c67f8 --- /dev/null +++ b/src/ov_SC03_002/ov_SC03_002_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C91C4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80185794[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CA3C4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801CBAE0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C91C4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801854D0)(); +extern s16 (*D_801854D4)(); +extern M2C_UNK (*D_801854DC)(); +extern s32 (*D_801854E0)(); +extern s32 D_801CA3C0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C91C8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80185828; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80188D0C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185840; +extern M2C_UNK D_80185848; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185850; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018586C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185878[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018588C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801858DC[]; +extern s16 D_8018590C[]; +extern s16 D_8018596C[]; +extern s16 D_80185974[]; +extern s16 D_80185994[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801859CC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185A24[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185A6C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185A74[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80185A7C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80185A84[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80185A2C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80185A4C; +extern void func_801321B0(int param_1); +extern int D_80185A5C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CA430; +extern s32 D_801CA434[]; +extern int D_801CA438; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185A90; +extern u8 D_80185A8C; +extern s16 *D_80185A94; +extern u8 D_80185A98; +extern int D_801CA430; +extern u16 D_801CA440; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80185A94; /* holds a pointer value (*(u16**)&D_80185A94) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80185AA8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185AFC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185B00[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80185B44; +extern u8 D_80185B88; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80185BCC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185C44, D_80185C46, D_80185C48, D_80185C4A, D_80185C4C, D_80185C4E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CA4A8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CA4AC; +extern s8 D_801CA4AD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CA4CC; +extern s32 D_801CA4C0; +extern s32 D_801CA4C4; +extern s32 D_801CA4D0; +extern void func_8013CABC(void); +extern s32 D_801CA4C8; +extern void func_8013CAE8(void); +extern s32 D_801CA4F8; +extern s32 D_801CA4FC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CA4D8; +extern s32 D_801CA4DC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801CBADA; +extern u8 D_801CBB4E; +extern u8 D_801CB9DA; +extern u8 D_801CBAA4; +extern u8 D_801CB9B0; +extern u8 D_801CB9D9; +extern s32 D_801CBAA8; +extern void func_8013D330(void); +extern void *D_801CA4B0; +extern void *D_801CA4B4; +extern void *D_801CA4B8; +extern s32 D_801CA4E0; +extern s32 D_801CA4E4; +extern s32 D_801CA4E8; +extern s32 D_801CBA1C[]; +extern u8 D_80185D3C[]; +extern u8 D_80185DE4[]; +extern u8 D_80185C94[]; +extern u8 D_80185D90[]; +extern u8 D_80185E10[]; +extern u8 D_80185CE8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CA4BC; +extern s32 D_801CA4EC; +extern s32 D_801CA4F0; +extern s32 D_801CA4F4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CA4D4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018689C; +extern s32 D_80115188; +extern s16 D_80186874; +extern s16 D_80186876; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186878; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80186554; +extern u8 *D_80186558; +extern u8 *D_8018655C; +extern u8 *D_80186560; +extern u8 *D_80186564; +extern u16 *D_80186568[]; +extern u16 *D_80186570[]; +extern u16 *D_80186590[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80186554; + iVar2 = func_80028D58(); + puVar3 = D_80186568[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80186558; + iVar2 = func_80028DE0(); + puVar3 = D_80186568[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018655C + 0x18) = *D_80186570[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80186560 + 0x18) = *D_80186570[iVar2]; + + puVar1 = D_80186564; + iVar2 = func_80028D9C(); + puVar3 = D_80186590[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80186490; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80186490); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801864A0; +extern char *D_801864C0; +extern char *D_801864C4; +extern char *D_801864C8; +extern char *D_801864CC; +extern char *D_801864D0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801864A0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801864C0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801864C4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801864C8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801864CC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801864D0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018635A; +extern unsigned short D_8018635E; +extern unsigned short D_80186362; +extern unsigned short D_80186366; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018635A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018635E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186362; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186366; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801868F0[])(void); + +void func_80141788(void) +{ + D_801868F0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801868FC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801868FC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186874; +extern s16 D_80186876; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186514; + extern u8 D_8018652C; + extern u8 D_801865A0; + extern u8 D_801865A8; + extern void *D_801CA508; + extern void *D_801CA50C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CA508 = &D_80186514; + D_801CA50C = &D_801865A0; + } else { + D_801CA508 = &D_8018652C; + D_801CA50C = &D_801865A8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186874 = 0xE; + D_80186876 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186878: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186878; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186878); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186850; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186850 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186920[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186920[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186930[])(void); + +void func_801425CC(void *a0) { + D_80186930[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186914; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186914); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186944[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186944[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186960[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186960[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186B30[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186B30[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186BE8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186BE8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C9B54; +extern u8 D_801CA510; +extern u8 D_801CA511; +extern u8 D_801CA512; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C9B54; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CA510 = mul * (local.b[0] >> 4); + D_801CA511 = mul * (local.b[1] >> 4); + D_801CA512 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80186938; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186938); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186954[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186954); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80186B20[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80186B20[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186B40[]; +extern unsigned char D_80186BA0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186B40); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80186BA0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C9B50; +extern u8 D_801CA510; +extern u8 D_801CA514; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C9B50, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CA510); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CA510, 0x10); + memcpy(&D_801CA514, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80186CF8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80186CF8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80186E20[])(void); + +void func_80143B30(void *a0) { + D_80186E20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80186E2C[])(void); + +void func_80143C38(void *a0) { + D_80186E2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80186E34[])(void); + +void func_80143C98(void *a0) { + D_80186E34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80143D28); + + +extern void (*D_80186E7C[])(void); + +void func_80143E68(void *a0) { + D_80186E7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186E90[])(void); + +void func_80144054(void *a0) { + D_80186E90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80186E98[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80186E98[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186E14; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80186E14, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80186E28; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186E28 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186E28 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80186E3C; +extern u8 D_80186E48; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186E3C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186E48); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80186E14; +extern u8 D_80186E84; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80186E14, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186E84, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186EA0[])(void); + +void func_801449C8(void *a0) { + D_80186EA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186EA8[])(void); + +void func_80144A2C(void *a0) { + D_80186EA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c b/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c index e97226d04..89df7824e 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018031C; -extern u8 *D_80180320; -extern u8 *D_80180324; -extern u8 *D_80180328; -extern u8 *D_8018032C; -extern u16 *D_80180330[]; -extern u16 *D_80180338[]; -extern u16 *D_80180358[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018031C; - iVar2 = func_80028D58(); - puVar3 = D_80180330[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80180320; - iVar2 = func_80028DE0(); - puVar3 = D_80180330[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80180324 + 0x18) = *D_80180338[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80180328 + 0x18) = *D_80180338[iVar2]; - - puVar1 = D_8018032C; - iVar2 = func_80028D9C(); - puVar3 = D_80180358[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180258; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180258); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180268; -extern char *D_80180288; -extern char *D_8018028C; -extern char *D_80180290; -extern char *D_80180294; -extern char *D_80180298; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180268); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180288; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018028C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180290; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180294; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180298; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80180122; -extern unsigned short D_80180126; -extern unsigned short D_8018012A; -extern unsigned short D_8018012E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80180122; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80180126; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018012A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018012E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801806B8[])(void); - -void func_80141788(void) -{ - D_801806B8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801806C4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801806C4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018063C; -extern s16 D_8018063E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801802DC; - extern u8 D_801802F4; - extern u8 D_80180368; - extern u8 D_80180370; - extern void *D_8018E810; - extern void *D_8018E814; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018E810 = &D_801802DC; - D_8018E814 = &D_80180368; - } else { - D_8018E810 = &D_801802F4; - D_8018E814 = &D_80180370; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018063C = 0xE; - D_8018063E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80180640: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80180640; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80180640); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80180618; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80180618 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801806E8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801806E8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801806F8[])(void); - -void func_801425CC(void *a0) { - D_801806F8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801806DC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801806DC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018070C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018070C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180728[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180728[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801808F8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801808F8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801809B0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801809B0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018DED4; -extern u8 D_8018E818; -extern u8 D_8018E819; -extern u8 D_8018E81A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018DED4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018E818 = mul * (local.b[0] >> 4); - D_8018E819 = mul * (local.b[1] >> 4); - D_8018E81A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180700; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180700); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018071C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018071C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801808E8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801808E8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180908[]; -extern unsigned char D_80180968[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180908); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80180968); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018DED0; -extern u8 D_8018E818; -extern u8 D_8018E81C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018DED0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E818); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018E818, 0x10); - memcpy(&D_8018E81C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180AC0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180AC0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180BE8[])(void); - -void func_80143B30(void *a0) { - D_80180BE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180BF4[])(void); - -void func_80143C38(void *a0) { - D_80180BF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180BFC[])(void); - -void func_80143C98(void *a0) { - D_80180BFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180C44[])(void); - -void func_80143E68(void *a0) { - D_80180C44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180C58[])(void); - -void func_80144054(void *a0) { - D_80180C58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180C60[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180C60[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180BDC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180BDC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180BF0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BF0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BF0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180C04; -extern u8 D_80180C10; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180C04); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180C10); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180BDC; -extern u8 D_80180C4C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180BDC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180C4C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180C68[])(void); - -void func_801449C8(void *a0) { - D_80180C68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180C70[])(void); - -void func_80144A2C(void *a0) { - D_80180C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_003/ov_SC03_003_jr_80140608.c b/src/ov_SC03_003/ov_SC03_003_jr_80140608.c new file mode 100644 index 000000000..9e9a55931 --- /dev/null +++ b/src/ov_SC03_003/ov_SC03_003_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018D544; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F55C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018E6CC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8018FB08; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018D544; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F298)(); +extern s16 (*D_8017F29C)(); +extern M2C_UNK (*D_8017F2A4)(); +extern s32 (*D_8017F2A8)(); +extern s32 D_8018E6C8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D548; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F5F0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182AD4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F608; +extern M2C_UNK D_8017F610; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F618; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F634[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F640[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F654[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F6A4[]; +extern s16 D_8017F6D4[]; +extern s16 D_8017F734[]; +extern s16 D_8017F73C[]; +extern s16 D_8017F75C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F794[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F7EC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F834[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F83C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F844[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F84C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F7F4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F814; +extern void func_801321B0(int param_1); +extern int D_8017F824; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018E738; +extern s32 D_8018E73C[]; +extern int D_8018E740; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F858; +extern u8 D_8017F854; +extern s16 *D_8017F85C; +extern u8 D_8017F860; +extern int D_8018E738; +extern u16 D_8018E748; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F85C; /* holds a pointer value (*(u16**)&D_8017F85C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F870[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F8C4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F8C8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F90C; +extern u8 D_8017F950; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F994[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017FA0C, D_8017FA0E, D_8017FA10, D_8017FA12, D_8017FA14, D_8017FA16; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018E7B0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018E7B4; +extern s8 D_8018E7B5; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018E7D4; +extern s32 D_8018E7C8; +extern s32 D_8018E7CC; +extern s32 D_8018E7D8; +extern void func_8013CABC(void); +extern s32 D_8018E7D0; +extern void func_8013CAE8(void); +extern s32 D_8018E800; +extern s32 D_8018E804; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018E7E0; +extern s32 D_8018E7E4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8018FB02; +extern u8 D_8018FB7C; +extern u8 D_8018FA2A; +extern u8 D_8018FAE4; +extern u8 D_8018FA08; +extern u8 D_8018FA29; +extern s32 D_8018FAE8; +extern void func_8013D330(void); +extern void *D_8018E7B8; +extern void *D_8018E7BC; +extern void *D_8018E7C0; +extern s32 D_8018E7E8; +extern s32 D_8018E7EC; +extern s32 D_8018E7F0; +extern s32 D_8018FA5C[]; +extern u8 D_8017FB04[]; +extern u8 D_8017FBAC[]; +extern u8 D_8017FA5C[]; +extern u8 D_8017FB58[]; +extern u8 D_8017FBD8[]; +extern u8 D_8017FAB0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018E7C4; +extern s32 D_8018E7F4; +extern s32 D_8018E7F8; +extern s32 D_8018E7FC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018E7DC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180664; +extern s32 D_80115188; +extern s16 D_8018063C; +extern s16 D_8018063E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80180640; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018031C; +extern u8 *D_80180320; +extern u8 *D_80180324; +extern u8 *D_80180328; +extern u8 *D_8018032C; +extern u16 *D_80180330[]; +extern u16 *D_80180338[]; +extern u16 *D_80180358[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018031C; + iVar2 = func_80028D58(); + puVar3 = D_80180330[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80180320; + iVar2 = func_80028DE0(); + puVar3 = D_80180330[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80180324 + 0x18) = *D_80180338[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80180328 + 0x18) = *D_80180338[iVar2]; + + puVar1 = D_8018032C; + iVar2 = func_80028D9C(); + puVar3 = D_80180358[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180258; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180258); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180268; +extern char *D_80180288; +extern char *D_8018028C; +extern char *D_80180290; +extern char *D_80180294; +extern char *D_80180298; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180268); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180288; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018028C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180290; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180294; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180298; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80180122; +extern unsigned short D_80180126; +extern unsigned short D_8018012A; +extern unsigned short D_8018012E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80180122; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80180126; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018012A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018012E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801806B8[])(void); + +void func_80141788(void) +{ + D_801806B8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801806C4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801806C4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018063C; +extern s16 D_8018063E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801802DC; + extern u8 D_801802F4; + extern u8 D_80180368; + extern u8 D_80180370; + extern void *D_8018E810; + extern void *D_8018E814; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018E810 = &D_801802DC; + D_8018E814 = &D_80180368; + } else { + D_8018E810 = &D_801802F4; + D_8018E814 = &D_80180370; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018063C = 0xE; + D_8018063E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80180640: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80180640; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80180640); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80180618; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80180618 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801806E8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801806E8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801806F8[])(void); + +void func_801425CC(void *a0) { + D_801806F8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801806DC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801806DC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018070C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018070C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180728[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180728[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801808F8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801808F8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801809B0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801809B0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018DED4; +extern u8 D_8018E818; +extern u8 D_8018E819; +extern u8 D_8018E81A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018DED4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018E818 = mul * (local.b[0] >> 4); + D_8018E819 = mul * (local.b[1] >> 4); + D_8018E81A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180700; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180700); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018071C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018071C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801808E8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801808E8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180908[]; +extern unsigned char D_80180968[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180908); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80180968); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018DED0; +extern u8 D_8018E818; +extern u8 D_8018E81C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018DED0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E818); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018E818, 0x10); + memcpy(&D_8018E81C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180AC0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180AC0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180BE8[])(void); + +void func_80143B30(void *a0) { + D_80180BE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180BF4[])(void); + +void func_80143C38(void *a0) { + D_80180BF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180BFC[])(void); + +void func_80143C98(void *a0) { + D_80180BFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80143D28); + + +extern void (*D_80180C44[])(void); + +void func_80143E68(void *a0) { + D_80180C44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180C58[])(void); + +void func_80144054(void *a0) { + D_80180C58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180C60[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180C60[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180BDC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180BDC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180BF0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BF0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BF0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180C04; +extern u8 D_80180C10; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180C04); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180C10); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180BDC; +extern u8 D_80180C4C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180BDC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180C4C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180C68[])(void); + +void func_801449C8(void *a0) { + D_80180C68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180C70[])(void); + +void func_80144A2C(void *a0) { + D_80180C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c b/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c index 94c826226..4fdab9e89 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018D638; -extern u8 *D_8018D63C; -extern u8 *D_8018D640; -extern u8 *D_8018D644; -extern u8 *D_8018D648; -extern u16 *D_8018D64C[]; -extern u16 *D_8018D654[]; -extern u16 *D_8018D674[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018D638; - iVar2 = func_80028D58(); - puVar3 = D_8018D64C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018D63C; - iVar2 = func_80028DE0(); - puVar3 = D_8018D64C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018D640 + 0x18) = *D_8018D654[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018D644 + 0x18) = *D_8018D654[iVar2]; - - puVar1 = D_8018D648; - iVar2 = func_80028D9C(); - puVar3 = D_8018D674[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018D574; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018D574); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018D584; -extern char *D_8018D5A4; -extern char *D_8018D5A8; -extern char *D_8018D5AC; -extern char *D_8018D5B0; -extern char *D_8018D5B4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018D584); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018D5A4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D5A8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D5AC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D5B0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D5B4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018D43E; -extern unsigned short D_8018D442; -extern unsigned short D_8018D446; -extern unsigned short D_8018D44A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018D43E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D442; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D446; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D44A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018D9D4[])(void); - -void func_80141788(void) -{ - D_8018D9D4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018D9E0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018D9E0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018D958; -extern s16 D_8018D95A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018D5F8; - extern u8 D_8018D610; - extern u8 D_8018D684; - extern u8 D_8018D68C; - extern void *D_801F6188; - extern void *D_801F618C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801F6188 = &D_8018D5F8; - D_801F618C = &D_8018D684; - } else { - D_801F6188 = &D_8018D610; - D_801F618C = &D_8018D68C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018D958 = 0xE; - D_8018D95A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018D95C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018D95C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018D95C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018D934; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018D934 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018DA04[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018DA04[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018DA14[])(void); - -void func_801425CC(void *a0) { - D_8018DA14[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018D9F8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018D9F8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DA28[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DA28[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DA44[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DA44[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DC14[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DC14[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DCCC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DCCC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801F5790; -extern u8 D_801F6190; -extern u8 D_801F6191; -extern u8 D_801F6192; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801F5790; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801F6190 = mul * (local.b[0] >> 4); - D_801F6191 = mul * (local.b[1] >> 4); - D_801F6192 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018DA1C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018DA1C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018DA38[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018DA38); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018DC04[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018DC04[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018DC24[]; -extern unsigned char D_8018DC84[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018DC24); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018DC84); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801F578C; -extern u8 D_801F6190; -extern u8 D_801F6194; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801F578C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801F6190); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801F6190, 0x10); - memcpy(&D_801F6194, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018DDDC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018DDDC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018DF04[])(void); - -void func_80143B30(void *a0) { - D_8018DF04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018DF10[])(void); - -void func_80143C38(void *a0) { - D_8018DF10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018DF18[])(void); - -void func_80143C98(void *a0) { - D_8018DF18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018DF60[])(void); - -void func_80143E68(void *a0) { - D_8018DF60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018DF74[])(void); - -void func_80144054(void *a0) { - D_8018DF74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018DF7C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018DF7C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018DEF8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018DEF8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018DF0C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018DF0C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018DF0C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018DF20; -extern u8 D_8018DF2C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018DF20); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018DF2C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018DEF8; -extern u8 D_8018DF68; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018DEF8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018DF68, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018DF84[])(void); - -void func_801449C8(void *a0) { - D_8018DF84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018DF8C[])(void); - -void func_80144A2C(void *a0) { - D_8018DF8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_006/ov_SC03_006_jr_80140608.c b/src/ov_SC03_006/ov_SC03_006_jr_80140608.c new file mode 100644 index 000000000..8dfb4b47a --- /dev/null +++ b/src/ov_SC03_006/ov_SC03_006_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801F4E00; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018C878[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801F6044; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801F7848; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801F4E00; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018C5B4)(); +extern s16 (*D_8018C5B8)(); +extern M2C_UNK (*D_8018C5C0)(); +extern s32 (*D_8018C5C4)(); +extern s32 D_801F6040; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801F4E04; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018C90C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018FDF0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018C924; +extern M2C_UNK D_8018C92C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018C934; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018C950[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018C95C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018C970[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018C9C0[]; +extern s16 D_8018C9F0[]; +extern s16 D_8018CA50[]; +extern s16 D_8018CA58[]; +extern s16 D_8018CA78[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018CAB0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018CB08[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018CB50[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018CB58[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018CB60[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018CB68[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018CB10; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018CB30; +extern void func_801321B0(int param_1); +extern int D_8018CB40; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801F60B0; +extern s32 D_801F60B4[]; +extern int D_801F60B8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018CB74; +extern u8 D_8018CB70; +extern s16 *D_8018CB78; +extern u8 D_8018CB7C; +extern int D_801F60B0; +extern u16 D_801F60C0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018CB78; /* holds a pointer value (*(u16**)&D_8018CB78) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018CB8C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018CBE0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018CBE4[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018CC28; +extern u8 D_8018CC6C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018CCB0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018CD28, D_8018CD2A, D_8018CD2C, D_8018CD2E, D_8018CD30, D_8018CD32; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801F6128; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801F612C; +extern s8 D_801F612D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801F614C; +extern s32 D_801F6140; +extern s32 D_801F6144; +extern s32 D_801F6150; +extern void func_8013CABC(void); +extern s32 D_801F6148; +extern void func_8013CAE8(void); +extern s32 D_801F6178; +extern s32 D_801F617C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801F6158; +extern s32 D_801F615C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801F7842; +extern u8 D_801F78B6; +extern u8 D_801F776A; +extern u8 D_801F7824; +extern u8 D_801F7748; +extern u8 D_801F7769; +extern s32 D_801F7828; +extern void func_8013D330(void); +extern void *D_801F6130; +extern void *D_801F6134; +extern void *D_801F6138; +extern s32 D_801F6160; +extern s32 D_801F6164; +extern s32 D_801F6168; +extern s32 D_801F779C[]; +extern u8 D_8018CE20[]; +extern u8 D_8018CEC8[]; +extern u8 D_8018CD78[]; +extern u8 D_8018CE74[]; +extern u8 D_8018CEF4[]; +extern u8 D_8018CDCC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801F613C; +extern s32 D_801F616C; +extern s32 D_801F6170; +extern s32 D_801F6174; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801F6154; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018D980; +extern s32 D_80115188; +extern s16 D_8018D958; +extern s16 D_8018D95A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018D95C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018D638; +extern u8 *D_8018D63C; +extern u8 *D_8018D640; +extern u8 *D_8018D644; +extern u8 *D_8018D648; +extern u16 *D_8018D64C[]; +extern u16 *D_8018D654[]; +extern u16 *D_8018D674[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018D638; + iVar2 = func_80028D58(); + puVar3 = D_8018D64C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018D63C; + iVar2 = func_80028DE0(); + puVar3 = D_8018D64C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018D640 + 0x18) = *D_8018D654[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018D644 + 0x18) = *D_8018D654[iVar2]; + + puVar1 = D_8018D648; + iVar2 = func_80028D9C(); + puVar3 = D_8018D674[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018D574; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018D574); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018D584; +extern char *D_8018D5A4; +extern char *D_8018D5A8; +extern char *D_8018D5AC; +extern char *D_8018D5B0; +extern char *D_8018D5B4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018D584); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018D5A4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D5A8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D5AC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D5B0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D5B4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018D43E; +extern unsigned short D_8018D442; +extern unsigned short D_8018D446; +extern unsigned short D_8018D44A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018D43E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D442; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D446; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D44A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018D9D4[])(void); + +void func_80141788(void) +{ + D_8018D9D4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018D9E0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018D9E0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018D958; +extern s16 D_8018D95A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018D5F8; + extern u8 D_8018D610; + extern u8 D_8018D684; + extern u8 D_8018D68C; + extern void *D_801F6188; + extern void *D_801F618C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801F6188 = &D_8018D5F8; + D_801F618C = &D_8018D684; + } else { + D_801F6188 = &D_8018D610; + D_801F618C = &D_8018D68C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018D958 = 0xE; + D_8018D95A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018D95C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018D95C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018D95C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018D934; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018D934 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018DA04[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018DA04[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018DA14[])(void); + +void func_801425CC(void *a0) { + D_8018DA14[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018D9F8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018D9F8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DA28[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DA28[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DA44[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DA44[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DC14[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DC14[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DCCC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DCCC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801F5790; +extern u8 D_801F6190; +extern u8 D_801F6191; +extern u8 D_801F6192; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801F5790; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801F6190 = mul * (local.b[0] >> 4); + D_801F6191 = mul * (local.b[1] >> 4); + D_801F6192 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018DA1C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018DA1C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018DA38[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018DA38); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018DC04[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018DC04[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018DC24[]; +extern unsigned char D_8018DC84[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018DC24); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018DC84); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801F578C; +extern u8 D_801F6190; +extern u8 D_801F6194; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801F578C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801F6190); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801F6190, 0x10); + memcpy(&D_801F6194, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018DDDC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018DDDC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018DF04[])(void); + +void func_80143B30(void *a0) { + D_8018DF04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018DF10[])(void); + +void func_80143C38(void *a0) { + D_8018DF10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018DF18[])(void); + +void func_80143C98(void *a0) { + D_8018DF18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80143D28); + + +extern void (*D_8018DF60[])(void); + +void func_80143E68(void *a0) { + D_8018DF60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018DF74[])(void); + +void func_80144054(void *a0) { + D_8018DF74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018DF7C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018DF7C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018DEF8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018DEF8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018DF0C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018DF0C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018DF0C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018DF20; +extern u8 D_8018DF2C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018DF20); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018DF2C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018DEF8; +extern u8 D_8018DF68; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018DEF8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018DF68, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018DF84[])(void); + +void func_801449C8(void *a0) { + D_8018DF84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018DF8C[])(void); + +void func_80144A2C(void *a0) { + D_8018DF8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c b/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c index 7336ef210..ac7534022 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80188430; -extern u8 *D_80188434; -extern u8 *D_80188438; -extern u8 *D_8018843C; -extern u8 *D_80188440; -extern u16 *D_80188444[]; -extern u16 *D_8018844C[]; -extern u16 *D_8018846C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80188430; - iVar2 = func_80028D58(); - puVar3 = D_80188444[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80188434; - iVar2 = func_80028DE0(); - puVar3 = D_80188444[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80188438 + 0x18) = *D_8018844C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018843C + 0x18) = *D_8018844C[iVar2]; - - puVar1 = D_80188440; - iVar2 = func_80028D9C(); - puVar3 = D_8018846C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018836C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018836C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018837C; -extern char *D_8018839C; -extern char *D_801883A0; -extern char *D_801883A4; -extern char *D_801883A8; -extern char *D_801883AC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018837C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018839C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801883A0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801883A4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801883A8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801883AC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80188236; -extern unsigned short D_8018823A; -extern unsigned short D_8018823E; -extern unsigned short D_80188242; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80188236; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018823A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018823E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80188242; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801887CC[])(void); - -void func_80141788(void) -{ - D_801887CC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801887D8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801887D8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80188750; -extern s16 D_80188752; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801883F0; - extern u8 D_80188408; - extern u8 D_8018847C; - extern u8 D_80188484; - extern void *D_801E8AE0; - extern void *D_801E8AE4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E8AE0 = &D_801883F0; - D_801E8AE4 = &D_8018847C; - } else { - D_801E8AE0 = &D_80188408; - D_801E8AE4 = &D_80188484; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80188750 = 0xE; - D_80188752 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80188754: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80188754; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80188754); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018872C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018872C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801887FC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801887FC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018880C[])(void); - -void func_801425CC(void *a0) { - D_8018880C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801887F0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801887F0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188820[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188820[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018883C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018883C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188A0C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188A0C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188AC4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188AC4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E8118; -extern u8 D_801E8AE8; -extern u8 D_801E8AE9; -extern u8 D_801E8AEA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E8118; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E8AE8 = mul * (local.b[0] >> 4); - D_801E8AE9 = mul * (local.b[1] >> 4); - D_801E8AEA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80188814; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188814); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188830[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188830); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801889FC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801889FC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188A1C[]; -extern unsigned char D_80188A7C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188A1C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80188A7C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E8114; -extern u8 D_801E8AE8; -extern u8 D_801E8AEC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E8114, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E8AE8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E8AE8, 0x10); - memcpy(&D_801E8AEC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80188BD4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80188BD4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80188CFC[])(void); - -void func_80143B30(void *a0) { - D_80188CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80188D08[])(void); - -void func_80143C38(void *a0) { - D_80188D08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80188D10[])(void); - -void func_80143C98(void *a0) { - D_80188D10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80143D28); - - -extern void (*D_80188D58[])(void); - -void func_80143E68(void *a0) { - D_80188D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80188D6C[])(void); - -void func_80144054(void *a0) { - D_80188D6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80188D74[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80188D74[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80188CF0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80188CF0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80188D04; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188D04 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188D04 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80188D18; -extern u8 D_80188D24; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188D18); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188D24); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80188CF0; -extern u8 D_80188D60; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80188CF0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80188D60, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80188D7C[])(void); - -void func_801449C8(void *a0) { - D_80188D7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80188D84[])(void); - -void func_80144A2C(void *a0) { - D_80188D84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_007/ov_SC03_007_jr_80140608.c b/src/ov_SC03_007/ov_SC03_007_jr_80140608.c new file mode 100644 index 000000000..1cd569fc1 --- /dev/null +++ b/src/ov_SC03_007/ov_SC03_007_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E7788; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80187670[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E899C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801EB258; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E7788; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801873AC)(); +extern s16 (*D_801873B0)(); +extern M2C_UNK (*D_801873B8)(); +extern s32 (*D_801873BC)(); +extern s32 D_801E8998; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E778C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80187704; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018ABE8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018771C; +extern M2C_UNK D_80187724; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018772C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80187748[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80187754[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80187768[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801877B8[]; +extern s16 D_801877E8[]; +extern s16 D_80187848[]; +extern s16 D_80187850[]; +extern s16 D_80187870[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801878A8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80187900[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80187948[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80187950[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80187958[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80187960[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80187908; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80187928; +extern void func_801321B0(int param_1); +extern int D_80187938; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E8A08; +extern s32 D_801E8A0C[]; +extern int D_801E8A10; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018796C; +extern u8 D_80187968; +extern s16 *D_80187970; +extern u8 D_80187974; +extern int D_801E8A08; +extern u16 D_801E8A18; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80187970; /* holds a pointer value (*(u16**)&D_80187970) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80187984[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801879D8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801879DC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80187A20; +extern u8 D_80187A64; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80187AA8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80187B20, D_80187B22, D_80187B24, D_80187B26, D_80187B28, D_80187B2A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E8A80; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E8A84; +extern s8 D_801E8A85; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E8AA4; +extern s32 D_801E8A98; +extern s32 D_801E8A9C; +extern s32 D_801E8AA8; +extern void func_8013CABC(void); +extern s32 D_801E8AA0; +extern void func_8013CAE8(void); +extern s32 D_801E8AD0; +extern s32 D_801E8AD4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E8AB0; +extern s32 D_801E8AB4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801EB252; +extern u8 D_801EB2C6; +extern u8 D_801EB17A; +extern u8 D_801EB234; +extern u8 D_801EB158; +extern u8 D_801EB179; +extern s32 D_801EB238; +extern void func_8013D330(void); +extern void *D_801E8A88; +extern void *D_801E8A8C; +extern void *D_801E8A90; +extern s32 D_801E8AB8; +extern s32 D_801E8ABC; +extern s32 D_801E8AC0; +extern s32 D_801EB1AC[]; +extern u8 D_80187C18[]; +extern u8 D_80187CC0[]; +extern u8 D_80187B70[]; +extern u8 D_80187C6C[]; +extern u8 D_80187CEC[]; +extern u8 D_80187BC4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E8A94; +extern s32 D_801E8AC4; +extern s32 D_801E8AC8; +extern s32 D_801E8ACC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E8AAC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80188778; +extern s32 D_80115188; +extern s16 D_80188750; +extern s16 D_80188752; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80188754; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80188430; +extern u8 *D_80188434; +extern u8 *D_80188438; +extern u8 *D_8018843C; +extern u8 *D_80188440; +extern u16 *D_80188444[]; +extern u16 *D_8018844C[]; +extern u16 *D_8018846C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80188430; + iVar2 = func_80028D58(); + puVar3 = D_80188444[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80188434; + iVar2 = func_80028DE0(); + puVar3 = D_80188444[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80188438 + 0x18) = *D_8018844C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018843C + 0x18) = *D_8018844C[iVar2]; + + puVar1 = D_80188440; + iVar2 = func_80028D9C(); + puVar3 = D_8018846C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018836C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018836C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018837C; +extern char *D_8018839C; +extern char *D_801883A0; +extern char *D_801883A4; +extern char *D_801883A8; +extern char *D_801883AC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018837C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018839C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801883A0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801883A4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801883A8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801883AC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80188236; +extern unsigned short D_8018823A; +extern unsigned short D_8018823E; +extern unsigned short D_80188242; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80188236; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018823A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018823E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80188242; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801887CC[])(void); + +void func_80141788(void) +{ + D_801887CC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801887D8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801887D8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80188750; +extern s16 D_80188752; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801883F0; + extern u8 D_80188408; + extern u8 D_8018847C; + extern u8 D_80188484; + extern void *D_801E8AE0; + extern void *D_801E8AE4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E8AE0 = &D_801883F0; + D_801E8AE4 = &D_8018847C; + } else { + D_801E8AE0 = &D_80188408; + D_801E8AE4 = &D_80188484; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80188750 = 0xE; + D_80188752 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80188754: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80188754; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80188754); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018872C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018872C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801887FC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801887FC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018880C[])(void); + +void func_801425CC(void *a0) { + D_8018880C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801887F0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801887F0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188820[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188820[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018883C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018883C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188A0C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188A0C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188AC4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188AC4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E8118; +extern u8 D_801E8AE8; +extern u8 D_801E8AE9; +extern u8 D_801E8AEA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E8118; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E8AE8 = mul * (local.b[0] >> 4); + D_801E8AE9 = mul * (local.b[1] >> 4); + D_801E8AEA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80188814; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188814); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188830[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188830); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801889FC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801889FC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188A1C[]; +extern unsigned char D_80188A7C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188A1C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80188A7C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E8114; +extern u8 D_801E8AE8; +extern u8 D_801E8AEC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E8114, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E8AE8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E8AE8, 0x10); + memcpy(&D_801E8AEC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80188BD4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80188BD4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80188CFC[])(void); + +void func_80143B30(void *a0) { + D_80188CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80188D08[])(void); + +void func_80143C38(void *a0) { + D_80188D08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80188D10[])(void); + +void func_80143C98(void *a0) { + D_80188D10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80143D28); + + +extern void (*D_80188D58[])(void); + +void func_80143E68(void *a0) { + D_80188D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80188D6C[])(void); + +void func_80144054(void *a0) { + D_80188D6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80188D74[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80188D74[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188CF0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80188CF0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80188D04; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188D04 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188D04 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80188D18; +extern u8 D_80188D24; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188D18); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188D24); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80188CF0; +extern u8 D_80188D60; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80188CF0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80188D60, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80188D7C[])(void); + +void func_801449C8(void *a0) { + D_80188D7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80188D84[])(void); + +void func_80144A2C(void *a0) { + D_80188D84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c b/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c index d6dd743e5..e48f62fbc 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80180F50; -extern u8 *D_80180F54; -extern u8 *D_80180F58; -extern u8 *D_80180F5C; -extern u8 *D_80180F60; -extern u16 *D_80180F64[]; -extern u16 *D_80180F6C[]; -extern u16 *D_80180F8C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80180F50; - iVar2 = func_80028D58(); - puVar3 = D_80180F64[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80180F54; - iVar2 = func_80028DE0(); - puVar3 = D_80180F64[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80180F58 + 0x18) = *D_80180F6C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80180F5C + 0x18) = *D_80180F6C[iVar2]; - - puVar1 = D_80180F60; - iVar2 = func_80028D9C(); - puVar3 = D_80180F8C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180E8C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180E8C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180E9C; -extern char *D_80180EBC; -extern char *D_80180EC0; -extern char *D_80180EC4; -extern char *D_80180EC8; -extern char *D_80180ECC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180E9C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180EBC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180EC0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180EC4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180EC8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180ECC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80180D56; -extern unsigned short D_80180D5A; -extern unsigned short D_80180D5E; -extern unsigned short D_80180D62; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80180D56; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80180D5A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180D5E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180D62; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801812EC[])(void); - -void func_80141788(void) -{ - D_801812EC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801812F8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801812F8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80181270; -extern s16 D_80181272; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180F10; - extern u8 D_80180F28; - extern u8 D_80180F9C; - extern u8 D_80180FA4; - extern void *D_8019ED40; - extern void *D_8019ED44; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019ED40 = &D_80180F10; - D_8019ED44 = &D_80180F9C; - } else { - D_8019ED40 = &D_80180F28; - D_8019ED44 = &D_80180FA4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80181270 = 0xE; - D_80181272 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80181274: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80181274; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80181274); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018124C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018124C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018131C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018131C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018132C[])(void); - -void func_801425CC(void *a0) { - D_8018132C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80181310; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80181310); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181340[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181340[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018135C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018135C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018152C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018152C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801815E4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801815E4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019E3F4; -extern u8 D_8019ED48; -extern u8 D_8019ED49; -extern u8 D_8019ED4A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019E3F4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019ED48 = mul * (local.b[0] >> 4); - D_8019ED49 = mul * (local.b[1] >> 4); - D_8019ED4A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80181334; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181334); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181350[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181350); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018151C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018151C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018153C[]; -extern unsigned char D_8018159C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018153C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018159C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019E3F0; -extern u8 D_8019ED48; -extern u8 D_8019ED4C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019E3F0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019ED48); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019ED48, 0x10); - memcpy(&D_8019ED4C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801816F4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801816F4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018181C[])(void); - -void func_80143B30(void *a0) { - D_8018181C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80181828[])(void); - -void func_80143C38(void *a0) { - D_80181828[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80181830[])(void); - -void func_80143C98(void *a0) { - D_80181830[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80143D28); - - -extern void (*D_80181878[])(void); - -void func_80143E68(void *a0) { - D_80181878[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018188C[])(void); - -void func_80144054(void *a0) { - D_8018188C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80181894[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80181894[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80181810; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80181810, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80181824; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181824 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181824 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80181838; -extern u8 D_80181844; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181838); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181844); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80181810; -extern u8 D_80181880; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80181810, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80181880, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018189C[])(void); - -void func_801449C8(void *a0) { - D_8018189C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801818A4[])(void); - -void func_80144A2C(void *a0) { - D_801818A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_010/ov_SC03_010_jr_80140608.c b/src/ov_SC03_010/ov_SC03_010_jr_80140608.c new file mode 100644 index 000000000..25597b541 --- /dev/null +++ b/src/ov_SC03_010/ov_SC03_010_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019DA64; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80180190[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019EBFC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A0160; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019DA64; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017FECC)(); +extern s16 (*D_8017FED0)(); +extern M2C_UNK (*D_8017FED8)(); +extern s32 (*D_8017FEDC)(); +extern s32 D_8019EBF8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019DA68; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80180224; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80183708; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018023C; +extern M2C_UNK D_80180244; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018024C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80180268[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80180274[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80180288[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801802D8[]; +extern s16 D_80180308[]; +extern s16 D_80180368[]; +extern s16 D_80180370[]; +extern s16 D_80180390[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801803C8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80180420[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80180468[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80180470[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80180478[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80180480[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80180428; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80180448; +extern void func_801321B0(int param_1); +extern int D_80180458; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019EC68; +extern s32 D_8019EC6C[]; +extern int D_8019EC70; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018048C; +extern u8 D_80180488; +extern s16 *D_80180490; +extern u8 D_80180494; +extern int D_8019EC68; +extern u16 D_8019EC78; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80180490; /* holds a pointer value (*(u16**)&D_80180490) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801804A4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801804F8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801804FC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80180540; +extern u8 D_80180584; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801805C8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80180640, D_80180642, D_80180644, D_80180646, D_80180648, D_8018064A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019ECE0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019ECE4; +extern s8 D_8019ECE5; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019ED04; +extern s32 D_8019ECF8; +extern s32 D_8019ECFC; +extern s32 D_8019ED08; +extern void func_8013CABC(void); +extern s32 D_8019ED00; +extern void func_8013CAE8(void); +extern s32 D_8019ED30; +extern s32 D_8019ED34; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019ED10; +extern s32 D_8019ED14; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A015A; +extern u8 D_801A01CE; +extern u8 D_801A0082; +extern u8 D_801A013C; +extern u8 D_801A0060; +extern u8 D_801A0081; +extern s32 D_801A0140; +extern void func_8013D330(void); +extern void *D_8019ECE8; +extern void *D_8019ECEC; +extern void *D_8019ECF0; +extern s32 D_8019ED18; +extern s32 D_8019ED1C; +extern s32 D_8019ED20; +extern s32 D_801A00B4[]; +extern u8 D_80180738[]; +extern u8 D_801807E0[]; +extern u8 D_80180690[]; +extern u8 D_8018078C[]; +extern u8 D_8018080C[]; +extern u8 D_801806E4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019ECF4; +extern s32 D_8019ED24; +extern s32 D_8019ED28; +extern s32 D_8019ED2C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019ED0C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80181298; +extern s32 D_80115188; +extern s16 D_80181270; +extern s16 D_80181272; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80181274; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80180F50; +extern u8 *D_80180F54; +extern u8 *D_80180F58; +extern u8 *D_80180F5C; +extern u8 *D_80180F60; +extern u16 *D_80180F64[]; +extern u16 *D_80180F6C[]; +extern u16 *D_80180F8C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80180F50; + iVar2 = func_80028D58(); + puVar3 = D_80180F64[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80180F54; + iVar2 = func_80028DE0(); + puVar3 = D_80180F64[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80180F58 + 0x18) = *D_80180F6C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80180F5C + 0x18) = *D_80180F6C[iVar2]; + + puVar1 = D_80180F60; + iVar2 = func_80028D9C(); + puVar3 = D_80180F8C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180E8C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180E8C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180E9C; +extern char *D_80180EBC; +extern char *D_80180EC0; +extern char *D_80180EC4; +extern char *D_80180EC8; +extern char *D_80180ECC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180E9C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180EBC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180EC0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180EC4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180EC8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180ECC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80180D56; +extern unsigned short D_80180D5A; +extern unsigned short D_80180D5E; +extern unsigned short D_80180D62; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80180D56; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80180D5A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180D5E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180D62; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801812EC[])(void); + +void func_80141788(void) +{ + D_801812EC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801812F8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801812F8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80181270; +extern s16 D_80181272; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180F10; + extern u8 D_80180F28; + extern u8 D_80180F9C; + extern u8 D_80180FA4; + extern void *D_8019ED40; + extern void *D_8019ED44; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019ED40 = &D_80180F10; + D_8019ED44 = &D_80180F9C; + } else { + D_8019ED40 = &D_80180F28; + D_8019ED44 = &D_80180FA4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80181270 = 0xE; + D_80181272 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80181274: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80181274; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80181274); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018124C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018124C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018131C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018131C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018132C[])(void); + +void func_801425CC(void *a0) { + D_8018132C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80181310; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80181310); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181340[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181340[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018135C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018135C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018152C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018152C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801815E4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801815E4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019E3F4; +extern u8 D_8019ED48; +extern u8 D_8019ED49; +extern u8 D_8019ED4A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019E3F4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019ED48 = mul * (local.b[0] >> 4); + D_8019ED49 = mul * (local.b[1] >> 4); + D_8019ED4A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80181334; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181334); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181350[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181350); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018151C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018151C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018153C[]; +extern unsigned char D_8018159C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018153C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018159C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019E3F0; +extern u8 D_8019ED48; +extern u8 D_8019ED4C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019E3F0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019ED48); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019ED48, 0x10); + memcpy(&D_8019ED4C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801816F4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801816F4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018181C[])(void); + +void func_80143B30(void *a0) { + D_8018181C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80181828[])(void); + +void func_80143C38(void *a0) { + D_80181828[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80181830[])(void); + +void func_80143C98(void *a0) { + D_80181830[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80143D28); + + +extern void (*D_80181878[])(void); + +void func_80143E68(void *a0) { + D_80181878[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018188C[])(void); + +void func_80144054(void *a0) { + D_8018188C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80181894[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80181894[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181810; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80181810, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80181824; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181824 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181824 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80181838; +extern u8 D_80181844; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181838); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181844); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80181810; +extern u8 D_80181880; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80181810, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80181880, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018189C[])(void); + +void func_801449C8(void *a0) { + D_8018189C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801818A4[])(void); + +void func_80144A2C(void *a0) { + D_801818A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c b/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c index 4123bac6f..a17f32aeb 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c @@ -1399,1168 +1399,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801822C0; -extern u8 *D_801822C4; -extern u8 *D_801822C8; -extern u8 *D_801822CC; -extern u8 *D_801822D0; -extern u16 *D_801822D4[]; -extern u16 *D_801822DC[]; -extern u16 *D_801822FC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801822C0; - iVar2 = func_80028D58(); - puVar3 = D_801822D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801822C4; - iVar2 = func_80028DE0(); - puVar3 = D_801822D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801822C8 + 0x18) = *D_801822DC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801822CC + 0x18) = *D_801822DC[iVar2]; - - puVar1 = D_801822D0; - iVar2 = func_80028D9C(); - puVar3 = D_801822FC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801821FC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801821FC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018220C; -extern char *D_8018222C; -extern char *D_80182230; -extern char *D_80182234; -extern char *D_80182238; -extern char *D_8018223C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018220C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018222C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182230; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182234; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182238; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018223C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801820C6; -extern unsigned short D_801820CA; -extern unsigned short D_801820CE; -extern unsigned short D_801820D2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801820C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801820CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801820CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801820D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018265C[])(void); - -void func_80141788(void) -{ - D_8018265C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80182668[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80182668[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; -extern s16 D_801825E0; -extern s16 D_801825E2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182280; - extern u8 D_80182298; - extern u8 D_8018230C; - extern u8 D_80182314; - extern void *D_801A0FD8; - extern void *D_801A0FDC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A0FD8 = &D_80182280; - D_801A0FDC = &D_8018230C; - } else { - D_801A0FD8 = &D_80182298; - D_801A0FDC = &D_80182314; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801825E0 = 0xE; - D_801825E2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801825E4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u8 D_801825E4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801825E4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801825BC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801825BC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018268C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018268C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018269C[])(void); - -void func_801425CC(void *a0) { - D_8018269C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80182680; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80182680); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801826B0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801826B0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801826CC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801826CC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018289C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018289C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182954[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182954[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A0664; -extern u8 D_801A0FE0; -extern u8 D_801A0FE1; -extern u8 D_801A0FE2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A0664; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A0FE0 = mul * (local.b[0] >> 4); - D_801A0FE1 = mul * (local.b[1] >> 4); - D_801A0FE2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801826A4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801826A4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801826C0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801826C0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018288C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018288C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801828AC[]; -extern unsigned char D_8018290C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801828AC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018290C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A0660; -extern u8 D_801A0FE0; -extern u8 D_801A0FE4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A0660, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0FE0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A0FE0, 0x10); - memcpy(&D_801A0FE4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80182A64[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80182A64[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80182B8C[])(void); - -void func_80143B30(void *a0) { - D_80182B8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80182B98[])(void); - -void func_80143C38(void *a0) { - D_80182B98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80182BA0[])(void); - -void func_80143C98(void *a0) { - D_80182BA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80143D28); - - -extern void (*D_80182BE8[])(void); - -void func_80143E68(void *a0) { - D_80182BE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80182BFC[])(void); - -void func_80144054(void *a0) { - D_80182BFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80182C04[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80182C04[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80182B80; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80182B80, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80182B94; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182B94 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182B94 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80182BA8; -extern u8 D_80182BB4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182BA8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182BB4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80182B80; -extern u8 D_80182BF0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80182B80, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80182BF0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80182C0C[])(void); - -void func_801449C8(void *a0) { - D_80182C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80182C14[])(void); - -void func_80144A2C(void *a0) { - D_80182C14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8013F350", func_80144B14); - - diff --git a/src/ov_SC03_011/ov_SC03_011_jr_80140608.c b/src/ov_SC03_011/ov_SC03_011_jr_80140608.c new file mode 100644 index 000000000..8e0aa4e0a --- /dev/null +++ b/src/ov_SC03_011/ov_SC03_011_jr_80140608.c @@ -0,0 +1,2248 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019FCD4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80181500[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A0E94; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A2390; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019FCD4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018123C)(); +extern s16 (*D_80181240)(); +extern M2C_UNK (*D_80181248)(); +extern s32 (*D_8018124C)(); +extern s32 D_801A0E90; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019FCD8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80181594; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80184A78; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801815AC; +extern M2C_UNK D_801815B4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801815BC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801815D8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801815E4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801815F8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80181648[]; +extern s16 D_80181678[]; +extern s16 D_801816D8[]; +extern s16 D_801816E0[]; +extern s16 D_80181700[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80181738[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80181790[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801817D8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801817E0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801817E8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801817F0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80181798; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801817B8; +extern void func_801321B0(int param_1); +extern int D_801817C8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A0F00; +extern s32 D_801A0F04[]; +extern int D_801A0F08; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801817FC; +extern u8 D_801817F8; +extern s16 *D_80181800; +extern u8 D_80181804; +extern int D_801A0F00; +extern u16 D_801A0F10; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80181800; /* holds a pointer value (*(u16**)&D_80181800) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80181814[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80181868; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_801380E0(s32 arg0); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018186C[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801818B0; +extern u8 D_801818F4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80181938[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801819B0, D_801819B2, D_801819B4, D_801819B6, D_801819B8, D_801819BA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A0F78; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A0F7C; +extern s8 D_801A0F7D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A0F9C; +extern s32 D_801A0F90; +extern s32 D_801A0F94; +extern s32 D_801A0FA0; +extern void func_8013CABC(void); +extern s32 D_801A0F98; +extern void func_8013CAE8(void); +extern s32 D_801A0FC8; +extern s32 D_801A0FCC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A0FA8; +extern s32 D_801A0FAC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern u8 D_801A238A; +extern u8 D_801A2402; +extern u8 D_801A22B2; +extern u8 D_801A236C; +extern u8 D_801A2290; +extern u8 D_801A22B1; +extern s32 D_801A2370; +extern void func_8013D330(void); +extern void *D_801A0F80; +extern void *D_801A0F84; +extern void *D_801A0F88; +extern s32 D_801A0FB0; +extern s32 D_801A0FB4; +extern s32 D_801A0FB8; +extern s32 D_801A22E4[]; +extern u8 D_80181AA8[]; +extern u8 D_80181B50[]; +extern u8 D_80181A00[]; +extern u8 D_80181AFC[]; +extern u8 D_80181B7C[]; +extern u8 D_80181A54[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A0F8C; +extern s32 D_801A0FBC; +extern s32 D_801A0FC0; +extern s32 D_801A0FC4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A0FA4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80182608; +extern s32 D_80115188; +extern s16 D_801825E0; +extern s16 D_801825E2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801825E4; +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern u16 D_8011512E; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_80182304[]; +extern u8 D_8018231C[]; +extern u16 D_80182220[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801822C0; +extern u8 *D_801822C4; +extern u8 *D_801822C8; +extern u8 *D_801822CC; +extern u8 *D_801822D0; +extern u16 *D_801822D4[]; +extern u16 *D_801822DC[]; +extern u16 *D_801822FC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801822C0; + iVar2 = func_80028D58(); + puVar3 = D_801822D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801822C4; + iVar2 = func_80028DE0(); + puVar3 = D_801822D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801822C8 + 0x18) = *D_801822DC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801822CC + 0x18) = *D_801822DC[iVar2]; + + puVar1 = D_801822D0; + iVar2 = func_80028D9C(); + puVar3 = D_801822FC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801821FC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801821FC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018220C; +extern char *D_8018222C; +extern char *D_80182230; +extern char *D_80182234; +extern char *D_80182238; +extern char *D_8018223C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018220C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018222C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182230; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182234; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182238; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018223C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801820C6; +extern unsigned short D_801820CA; +extern unsigned short D_801820CE; +extern unsigned short D_801820D2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801820C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801820CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801820CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801820D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018265C[])(void); + +void func_80141788(void) +{ + D_8018265C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80182668[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80182668[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; +extern s16 D_801825E0; +extern s16 D_801825E2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182280; + extern u8 D_80182298; + extern u8 D_8018230C; + extern u8 D_80182314; + extern void *D_801A0FD8; + extern void *D_801A0FDC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A0FD8 = &D_80182280; + D_801A0FDC = &D_8018230C; + } else { + D_801A0FD8 = &D_80182298; + D_801A0FDC = &D_80182314; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801825E0 = 0xE; + D_801825E2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801825E4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u8 D_801825E4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801825E4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801825BC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801825BC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018268C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018268C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018269C[])(void); + +void func_801425CC(void *a0) { + D_8018269C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80182680; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80182680); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801826B0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801826B0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801826CC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801826CC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018289C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018289C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182954[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182954[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A0664; +extern u8 D_801A0FE0; +extern u8 D_801A0FE1; +extern u8 D_801A0FE2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A0664; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A0FE0 = mul * (local.b[0] >> 4); + D_801A0FE1 = mul * (local.b[1] >> 4); + D_801A0FE2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801826A4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801826A4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801826C0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801826C0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018288C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018288C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801828AC[]; +extern unsigned char D_8018290C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801828AC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018290C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A0660; +extern u8 D_801A0FE0; +extern u8 D_801A0FE4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A0660, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0FE0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A0FE0, 0x10); + memcpy(&D_801A0FE4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80182A64[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80182A64[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80182B8C[])(void); + +void func_80143B30(void *a0) { + D_80182B8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80182B98[])(void); + +void func_80143C38(void *a0) { + D_80182B98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80182BA0[])(void); + +void func_80143C98(void *a0) { + D_80182BA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80143D28); + + +extern void (*D_80182BE8[])(void); + +void func_80143E68(void *a0) { + D_80182BE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80182BFC[])(void); + +void func_80144054(void *a0) { + D_80182BFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80182C04[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80182C04[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182B80; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80182B80, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80182B94; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182B94 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182B94 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80182BA8; +extern u8 D_80182BB4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182BA8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182BB4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80182B80; +extern u8 D_80182BF0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80182B80, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80182BF0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80182C0C[])(void); + +void func_801449C8(void *a0) { + D_80182C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80182C14[])(void); + +void func_80144A2C(void *a0) { + D_80182C14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80140608", func_80144B14); + + + diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c b/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c index 0f3367730..325be05cf 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F1A0; -extern u8 *D_8017F1A4; -extern u8 *D_8017F1A8; -extern u8 *D_8017F1AC; -extern u8 *D_8017F1B0; -extern u16 *D_8017F1B4[]; -extern u16 *D_8017F1BC[]; -extern u16 *D_8017F1DC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F1A0; - iVar2 = func_80028D58(); - puVar3 = D_8017F1B4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F1A4; - iVar2 = func_80028DE0(); - puVar3 = D_8017F1B4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F1A8 + 0x18) = *D_8017F1BC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F1AC + 0x18) = *D_8017F1BC[iVar2]; - - puVar1 = D_8017F1B0; - iVar2 = func_80028D9C(); - puVar3 = D_8017F1DC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F0DC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F0DC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F0EC; -extern char *D_8017F10C; -extern char *D_8017F110; -extern char *D_8017F114; -extern char *D_8017F118; -extern char *D_8017F11C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F0EC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F10C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F110; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F114; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F118; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F11C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017EFA6; -extern unsigned short D_8017EFAA; -extern unsigned short D_8017EFAE; -extern unsigned short D_8017EFB2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017EFA6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EFAA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EFAE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EFB2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F53C[])(void); - -void func_80141788(void) -{ - D_8017F53C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F548[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F548[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F4C0; -extern s16 D_8017F4C2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F160; - extern u8 D_8017F178; - extern u8 D_8017F1EC; - extern u8 D_8017F1F4; - extern void *D_80193DF8; - extern void *D_80193DFC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80193DF8 = &D_8017F160; - D_80193DFC = &D_8017F1EC; - } else { - D_80193DF8 = &D_8017F178; - D_80193DFC = &D_8017F1F4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F4C0 = 0xE; - D_8017F4C2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F4C4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F4C4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F4C4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F49C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F49C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F56C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F56C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F57C[])(void); - -void func_801425CC(void *a0) { - D_8017F57C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F560; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F560); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F590[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F590[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F5AC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F5AC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F77C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F77C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F834[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F834[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801934C0; -extern u8 D_80193E00; -extern u8 D_80193E01; -extern u8 D_80193E02; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801934C0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80193E00 = mul * (local.b[0] >> 4); - D_80193E01 = mul * (local.b[1] >> 4); - D_80193E02 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F584; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F584); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F5A0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F5A0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F76C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F76C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F78C[]; -extern unsigned char D_8017F7EC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F78C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F7EC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801934BC; -extern u8 D_80193E00; -extern u8 D_80193E04; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801934BC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80193E00); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80193E00, 0x10); - memcpy(&D_80193E04, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017F944[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017F944[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017FA6C[])(void); - -void func_80143B30(void *a0) { - D_8017FA6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017FA78[])(void); - -void func_80143C38(void *a0) { - D_8017FA78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017FA80[])(void); - -void func_80143C98(void *a0) { - D_8017FA80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017FAC8[])(void); - -void func_80143E68(void *a0) { - D_8017FAC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017FADC[])(void); - -void func_80144054(void *a0) { - D_8017FADC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017FAE4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017FAE4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017FA60; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FA60, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017FA74; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FA74 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FA74 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017FA88; -extern u8 D_8017FA94; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FA88); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FA94); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017FA60; -extern u8 D_8017FAD0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FA60, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017FAD0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017FAEC[])(void); - -void func_801449C8(void *a0) { - D_8017FAEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017FAF4[])(void); - -void func_80144A2C(void *a0) { - D_8017FAF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_012/ov_SC03_012_jr_80140608.c b/src/ov_SC03_012/ov_SC03_012_jr_80140608.c new file mode 100644 index 000000000..137fa6084 --- /dev/null +++ b/src/ov_SC03_012/ov_SC03_012_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80192B30; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E3E0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80193CB4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801950F0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80192B30; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017E11C)(); +extern s16 (*D_8017E120)(); +extern M2C_UNK (*D_8017E128)(); +extern s32 (*D_8017E12C)(); +extern s32 D_80193CB0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80192B34; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E474; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80181958; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E48C; +extern M2C_UNK D_8017E494; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E49C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E4B8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E4C4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E4D8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E528[]; +extern s16 D_8017E558[]; +extern s16 D_8017E5B8[]; +extern s16 D_8017E5C0[]; +extern s16 D_8017E5E0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E618[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E670[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E6B8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E6C0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E6C8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E6D0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E678; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E698; +extern void func_801321B0(int param_1); +extern int D_8017E6A8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80193D20; +extern s32 D_80193D24[]; +extern int D_80193D28; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E6DC; +extern u8 D_8017E6D8; +extern s16 *D_8017E6E0; +extern u8 D_8017E6E4; +extern int D_80193D20; +extern u16 D_80193D30; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E6E0; /* holds a pointer value (*(u16**)&D_8017E6E0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E6F4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E748; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E74C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E790; +extern u8 D_8017E7D4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E818[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E890, D_8017E892, D_8017E894, D_8017E896, D_8017E898, D_8017E89A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80193D98; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80193D9C; +extern s8 D_80193D9D; +extern void func_8013C9C4(void * arg0); +extern s32 D_80193DBC; +extern s32 D_80193DB0; +extern s32 D_80193DB4; +extern s32 D_80193DC0; +extern void func_8013CABC(void); +extern s32 D_80193DB8; +extern void func_8013CAE8(void); +extern s32 D_80193DE8; +extern s32 D_80193DEC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80193DC8; +extern s32 D_80193DCC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801950EA; +extern u8 D_8019515E; +extern u8 D_80195012; +extern u8 D_801950CC; +extern u8 D_80194FF0; +extern u8 D_80195011; +extern s32 D_801950D0; +extern void func_8013D330(void); +extern void *D_80193DA0; +extern void *D_80193DA4; +extern void *D_80193DA8; +extern s32 D_80193DD0; +extern s32 D_80193DD4; +extern s32 D_80193DD8; +extern s32 D_80195044[]; +extern u8 D_8017E988[]; +extern u8 D_8017EA30[]; +extern u8 D_8017E8E0[]; +extern u8 D_8017E9DC[]; +extern u8 D_8017EA5C[]; +extern u8 D_8017E934[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80193DAC; +extern s32 D_80193DDC; +extern s32 D_80193DE0; +extern s32 D_80193DE4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80193DC4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F4E8; +extern s32 D_80115188; +extern s16 D_8017F4C0; +extern s16 D_8017F4C2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F4C4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F1A0; +extern u8 *D_8017F1A4; +extern u8 *D_8017F1A8; +extern u8 *D_8017F1AC; +extern u8 *D_8017F1B0; +extern u16 *D_8017F1B4[]; +extern u16 *D_8017F1BC[]; +extern u16 *D_8017F1DC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F1A0; + iVar2 = func_80028D58(); + puVar3 = D_8017F1B4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F1A4; + iVar2 = func_80028DE0(); + puVar3 = D_8017F1B4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F1A8 + 0x18) = *D_8017F1BC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F1AC + 0x18) = *D_8017F1BC[iVar2]; + + puVar1 = D_8017F1B0; + iVar2 = func_80028D9C(); + puVar3 = D_8017F1DC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F0DC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F0DC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F0EC; +extern char *D_8017F10C; +extern char *D_8017F110; +extern char *D_8017F114; +extern char *D_8017F118; +extern char *D_8017F11C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F0EC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F10C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F110; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F114; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F118; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F11C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017EFA6; +extern unsigned short D_8017EFAA; +extern unsigned short D_8017EFAE; +extern unsigned short D_8017EFB2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017EFA6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EFAA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EFAE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EFB2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F53C[])(void); + +void func_80141788(void) +{ + D_8017F53C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F548[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F548[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F4C0; +extern s16 D_8017F4C2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F160; + extern u8 D_8017F178; + extern u8 D_8017F1EC; + extern u8 D_8017F1F4; + extern void *D_80193DF8; + extern void *D_80193DFC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80193DF8 = &D_8017F160; + D_80193DFC = &D_8017F1EC; + } else { + D_80193DF8 = &D_8017F178; + D_80193DFC = &D_8017F1F4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F4C0 = 0xE; + D_8017F4C2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F4C4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F4C4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F4C4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F49C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F49C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F56C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F56C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F57C[])(void); + +void func_801425CC(void *a0) { + D_8017F57C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F560; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F560); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F590[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F590[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F5AC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F5AC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F77C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F77C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F834[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F834[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801934C0; +extern u8 D_80193E00; +extern u8 D_80193E01; +extern u8 D_80193E02; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801934C0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80193E00 = mul * (local.b[0] >> 4); + D_80193E01 = mul * (local.b[1] >> 4); + D_80193E02 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F584; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F584); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F5A0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F5A0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F76C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F76C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F78C[]; +extern unsigned char D_8017F7EC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F78C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F7EC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801934BC; +extern u8 D_80193E00; +extern u8 D_80193E04; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801934BC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80193E00); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80193E00, 0x10); + memcpy(&D_80193E04, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017F944[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017F944[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017FA6C[])(void); + +void func_80143B30(void *a0) { + D_8017FA6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017FA78[])(void); + +void func_80143C38(void *a0) { + D_8017FA78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017FA80[])(void); + +void func_80143C98(void *a0) { + D_8017FA80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80143D28); + + +extern void (*D_8017FAC8[])(void); + +void func_80143E68(void *a0) { + D_8017FAC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017FADC[])(void); + +void func_80144054(void *a0) { + D_8017FADC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017FAE4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017FAE4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017FA60; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FA60, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017FA74; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FA74 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FA74 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017FA88; +extern u8 D_8017FA94; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FA88); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FA94); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017FA60; +extern u8 D_8017FAD0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FA60, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017FAD0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017FAEC[])(void); + +void func_801449C8(void *a0) { + D_8017FAEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017FAF4[])(void); + +void func_80144A2C(void *a0) { + D_8017FAF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c b/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c index 95043b446..62c5341d8 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181F88; -extern u8 *D_80181F8C; -extern u8 *D_80181F90; -extern u8 *D_80181F94; -extern u8 *D_80181F98; -extern u16 *D_80181F9C[]; -extern u16 *D_80181FA4[]; -extern u16 *D_80181FC4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181F88; - iVar2 = func_80028D58(); - puVar3 = D_80181F9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181F8C; - iVar2 = func_80028DE0(); - puVar3 = D_80181F9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80181F90 + 0x18) = *D_80181FA4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80181F94 + 0x18) = *D_80181FA4[iVar2]; - - puVar1 = D_80181F98; - iVar2 = func_80028D9C(); - puVar3 = D_80181FC4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80181EC4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80181EC4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80181ED4; -extern char *D_80181EF4; -extern char *D_80181EF8; -extern char *D_80181EFC; -extern char *D_80181F00; -extern char *D_80181F04; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80181ED4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80181EF4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181EF8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181EFC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181F00; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181F04; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80181D8E; -extern unsigned short D_80181D92; -extern unsigned short D_80181D96; -extern unsigned short D_80181D9A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80181D8E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80181D92; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181D96; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181D9A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80182324[])(void); - -void func_80141788(void) -{ - D_80182324[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80182330[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80182330[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801822A8; -extern s16 D_801822AA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181F48; - extern u8 D_80181F60; - extern u8 D_80181FD4; - extern u8 D_80181FDC; - extern void *D_801AC0C8; - extern void *D_801AC0CC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801AC0C8 = &D_80181F48; - D_801AC0CC = &D_80181FD4; - } else { - D_801AC0C8 = &D_80181F60; - D_801AC0CC = &D_80181FDC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801822A8 = 0xE; - D_801822AA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801822AC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801822AC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801822AC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80182284; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80182284 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80182354[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80182354[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80182364[])(void); - -void func_801425CC(void *a0) { - D_80182364[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80182348; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80182348); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182378[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182378[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182394[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182394[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182564[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182564[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018261C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018261C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801AB758; -extern u8 D_801AC0D0; -extern u8 D_801AC0D1; -extern u8 D_801AC0D2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801AB758; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801AC0D0 = mul * (local.b[0] >> 4); - D_801AC0D1 = mul * (local.b[1] >> 4); - D_801AC0D2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018236C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018236C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80182388[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80182388); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80182554[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80182554[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80182574[]; -extern unsigned char D_801825D4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182574); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801825D4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801AB754; -extern u8 D_801AC0D0; -extern u8 D_801AC0D4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801AB754, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801AC0D0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801AC0D0, 0x10); - memcpy(&D_801AC0D4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018272C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018272C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80182854[])(void); - -void func_80143B30(void *a0) { - D_80182854[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80182860[])(void); - -void func_80143C38(void *a0) { - D_80182860[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80182868[])(void); - -void func_80143C98(void *a0) { - D_80182868[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80143D28); - - -extern void (*D_801828B0[])(void); - -void func_80143E68(void *a0) { - D_801828B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801828C4[])(void); - -void func_80144054(void *a0) { - D_801828C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801828CC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801828CC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80182848; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80182848, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018285C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018285C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018285C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80182870; -extern u8 D_8018287C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182870); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018287C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80182848; -extern u8 D_801828B8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80182848, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801828B8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801828D4[])(void); - -void func_801449C8(void *a0) { - D_801828D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801828DC[])(void); - -void func_80144A2C(void *a0) { - D_801828DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_013/ov_SC03_013_jr_80140608.c b/src/ov_SC03_013/ov_SC03_013_jr_80140608.c new file mode 100644 index 000000000..5edcd9c68 --- /dev/null +++ b/src/ov_SC03_013/ov_SC03_013_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AADC8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801811C8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801ABF84; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AD4E8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AADC8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80180F04)(); +extern s16 (*D_80180F08)(); +extern M2C_UNK (*D_80180F10)(); +extern s32 (*D_80180F14)(); +extern s32 D_801ABF80; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AADCC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018125C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80184740; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80181274; +extern M2C_UNK D_8018127C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80181284; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801812A0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801812AC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801812C0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80181310[]; +extern s16 D_80181340[]; +extern s16 D_801813A0[]; +extern s16 D_801813A8[]; +extern s16 D_801813C8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80181400[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80181458[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801814A0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801814A8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801814B0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801814B8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80181460; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80181480; +extern void func_801321B0(int param_1); +extern int D_80181490; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801ABFF0; +extern s32 D_801ABFF4[]; +extern int D_801ABFF8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801814C4; +extern u8 D_801814C0; +extern s16 *D_801814C8; +extern u8 D_801814CC; +extern int D_801ABFF0; +extern u16 D_801AC000; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801814C8; /* holds a pointer value (*(u16**)&D_801814C8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801814DC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80181530; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80181534[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80181578; +extern u8 D_801815BC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80181600[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80181678, D_8018167A, D_8018167C, D_8018167E, D_80181680, D_80181682; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801AC068; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801AC06C; +extern s8 D_801AC06D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801AC08C; +extern s32 D_801AC080; +extern s32 D_801AC084; +extern s32 D_801AC090; +extern void func_8013CABC(void); +extern s32 D_801AC088; +extern void func_8013CAE8(void); +extern s32 D_801AC0B8; +extern s32 D_801AC0BC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801AC098; +extern s32 D_801AC09C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AD4E2; +extern u8 D_801AD556; +extern u8 D_801AD40A; +extern u8 D_801AD4C4; +extern u8 D_801AD3E8; +extern u8 D_801AD409; +extern s32 D_801AD4C8; +extern void func_8013D330(void); +extern void *D_801AC070; +extern void *D_801AC074; +extern void *D_801AC078; +extern s32 D_801AC0A0; +extern s32 D_801AC0A4; +extern s32 D_801AC0A8; +extern s32 D_801AD43C[]; +extern u8 D_80181770[]; +extern u8 D_80181818[]; +extern u8 D_801816C8[]; +extern u8 D_801817C4[]; +extern u8 D_80181844[]; +extern u8 D_8018171C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801AC07C; +extern s32 D_801AC0AC; +extern s32 D_801AC0B0; +extern s32 D_801AC0B4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801AC094; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801822D0; +extern s32 D_80115188; +extern s16 D_801822A8; +extern s16 D_801822AA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801822AC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181F88; +extern u8 *D_80181F8C; +extern u8 *D_80181F90; +extern u8 *D_80181F94; +extern u8 *D_80181F98; +extern u16 *D_80181F9C[]; +extern u16 *D_80181FA4[]; +extern u16 *D_80181FC4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181F88; + iVar2 = func_80028D58(); + puVar3 = D_80181F9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181F8C; + iVar2 = func_80028DE0(); + puVar3 = D_80181F9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80181F90 + 0x18) = *D_80181FA4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80181F94 + 0x18) = *D_80181FA4[iVar2]; + + puVar1 = D_80181F98; + iVar2 = func_80028D9C(); + puVar3 = D_80181FC4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80181EC4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80181EC4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80181ED4; +extern char *D_80181EF4; +extern char *D_80181EF8; +extern char *D_80181EFC; +extern char *D_80181F00; +extern char *D_80181F04; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80181ED4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80181EF4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181EF8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181EFC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181F00; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181F04; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80181D8E; +extern unsigned short D_80181D92; +extern unsigned short D_80181D96; +extern unsigned short D_80181D9A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80181D8E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80181D92; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181D96; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181D9A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80182324[])(void); + +void func_80141788(void) +{ + D_80182324[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80182330[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80182330[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801822A8; +extern s16 D_801822AA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181F48; + extern u8 D_80181F60; + extern u8 D_80181FD4; + extern u8 D_80181FDC; + extern void *D_801AC0C8; + extern void *D_801AC0CC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801AC0C8 = &D_80181F48; + D_801AC0CC = &D_80181FD4; + } else { + D_801AC0C8 = &D_80181F60; + D_801AC0CC = &D_80181FDC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801822A8 = 0xE; + D_801822AA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801822AC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801822AC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801822AC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80182284; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80182284 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80182354[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80182354[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80182364[])(void); + +void func_801425CC(void *a0) { + D_80182364[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80182348; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80182348); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182378[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182378[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182394[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182394[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182564[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182564[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018261C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018261C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801AB758; +extern u8 D_801AC0D0; +extern u8 D_801AC0D1; +extern u8 D_801AC0D2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801AB758; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801AC0D0 = mul * (local.b[0] >> 4); + D_801AC0D1 = mul * (local.b[1] >> 4); + D_801AC0D2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018236C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018236C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80182388[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80182388); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80182554[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80182554[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80182574[]; +extern unsigned char D_801825D4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182574); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801825D4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801AB754; +extern u8 D_801AC0D0; +extern u8 D_801AC0D4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801AB754, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801AC0D0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801AC0D0, 0x10); + memcpy(&D_801AC0D4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018272C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018272C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80182854[])(void); + +void func_80143B30(void *a0) { + D_80182854[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80182860[])(void); + +void func_80143C38(void *a0) { + D_80182860[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80182868[])(void); + +void func_80143C98(void *a0) { + D_80182868[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80143D28); + + +extern void (*D_801828B0[])(void); + +void func_80143E68(void *a0) { + D_801828B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801828C4[])(void); + +void func_80144054(void *a0) { + D_801828C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801828CC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801828CC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182848; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80182848, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018285C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018285C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018285C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80182870; +extern u8 D_8018287C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182870); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018287C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80182848; +extern u8 D_801828B8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80182848, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801828B8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801828D4[])(void); + +void func_801449C8(void *a0) { + D_801828D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801828DC[])(void); + +void func_80144A2C(void *a0) { + D_801828DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c b/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c index c68e40b91..b5d7a944e 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018C5C4; -extern u8 *D_8018C5C8; -extern u8 *D_8018C5CC; -extern u8 *D_8018C5D0; -extern u8 *D_8018C5D4; -extern u16 *D_8018C5D8[]; -extern u16 *D_8018C5E0[]; -extern u16 *D_8018C600[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018C5C4; - iVar2 = func_80028D58(); - puVar3 = D_8018C5D8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018C5C8; - iVar2 = func_80028DE0(); - puVar3 = D_8018C5D8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018C5CC + 0x18) = *D_8018C5E0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018C5D0 + 0x18) = *D_8018C5E0[iVar2]; - - puVar1 = D_8018C5D4; - iVar2 = func_80028D9C(); - puVar3 = D_8018C600[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018C500; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018C500); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018C510; -extern char *D_8018C530; -extern char *D_8018C534; -extern char *D_8018C538; -extern char *D_8018C53C; -extern char *D_8018C540; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018C510); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018C530; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C534; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C538; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C53C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C540; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018C3CA; -extern unsigned short D_8018C3CE; -extern unsigned short D_8018C3D2; -extern unsigned short D_8018C3D6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018C3CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C3CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C3D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C3D6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018C960[])(void); - -void func_80141788(void) -{ - D_8018C960[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018C96C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018C96C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018C8E4; -extern s16 D_8018C8E6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018C584; - extern u8 D_8018C59C; - extern u8 D_8018C610; - extern u8 D_8018C618; - extern void *D_801E9648; - extern void *D_801E964C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E9648 = &D_8018C584; - D_801E964C = &D_8018C610; - } else { - D_801E9648 = &D_8018C59C; - D_801E964C = &D_8018C618; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018C8E4 = 0xE; - D_8018C8E6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018C8E8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018C8E8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018C8E8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018C8C0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018C8C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018C990[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018C990[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018C9A0[])(void); - -void func_801425CC(void *a0) { - D_8018C9A0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018C984; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018C984); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C9B4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C9B4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C9D0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C9D0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CBA0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CBA0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CC58[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CC58[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E8B2C; -extern u8 D_801E9650; -extern u8 D_801E9651; -extern u8 D_801E9652; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E8B2C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E9650 = mul * (local.b[0] >> 4); - D_801E9651 = mul * (local.b[1] >> 4); - D_801E9652 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018C9A8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C9A8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C9C4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C9C4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018CB90[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018CB90[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018CBB0[]; -extern unsigned char D_8018CC10[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018CBB0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018CC10); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E8B28; -extern u8 D_801E9650; -extern u8 D_801E9654; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E8B28, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E9650); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E9650, 0x10); - memcpy(&D_801E9654, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018CD68[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018CD68[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018CE90[])(void); - -void func_80143B30(void *a0) { - D_8018CE90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018CE9C[])(void); - -void func_80143C38(void *a0) { - D_8018CE9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018CEA4[])(void); - -void func_80143C98(void *a0) { - D_8018CEA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018CEEC[])(void); - -void func_80143E68(void *a0) { - D_8018CEEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018CF00[])(void); - -void func_80144054(void *a0) { - D_8018CF00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018CF08[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018CF08[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018CE84; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018CE84, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018CE98; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CE98 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CE98 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018CEAC; -extern u8 D_8018CEB8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CEAC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CEB8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018CE84; -extern u8 D_8018CEF4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018CE84, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018CEF4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018CF10[])(void); - -void func_801449C8(void *a0) { - D_8018CF10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018CF18[])(void); - -void func_80144A2C(void *a0) { - D_8018CF18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_014/ov_SC03_014_jr_80140608.c b/src/ov_SC03_014/ov_SC03_014_jr_80140608.c new file mode 100644 index 000000000..309578647 --- /dev/null +++ b/src/ov_SC03_014/ov_SC03_014_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E819C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018B804[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E9504; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801EAFD0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E819C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018B540)(); +extern s16 (*D_8018B544)(); +extern M2C_UNK (*D_8018B54C)(); +extern s32 (*D_8018B550)(); +extern s32 D_801E9500; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E81A0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018B898; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018ED7C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018B8B0; +extern M2C_UNK D_8018B8B8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018B8C0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018B8DC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018B8E8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018B8FC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018B94C[]; +extern s16 D_8018B97C[]; +extern s16 D_8018B9DC[]; +extern s16 D_8018B9E4[]; +extern s16 D_8018BA04[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018BA3C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018BA94[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018BADC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018BAE4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018BAEC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018BAF4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018BA9C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018BABC; +extern void func_801321B0(int param_1); +extern int D_8018BACC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E9570; +extern s32 D_801E9574[]; +extern int D_801E9578; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018BB00; +extern u8 D_8018BAFC; +extern s16 *D_8018BB04; +extern u8 D_8018BB08; +extern int D_801E9570; +extern u16 D_801E9580; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018BB04; /* holds a pointer value (*(u16**)&D_8018BB04) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018BB18[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018BB6C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018BB70[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018BBB4; +extern u8 D_8018BBF8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018BC3C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018BCB4, D_8018BCB6, D_8018BCB8, D_8018BCBA, D_8018BCBC, D_8018BCBE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E95E8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E95EC; +extern s8 D_801E95ED; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E960C; +extern s32 D_801E9600; +extern s32 D_801E9604; +extern s32 D_801E9610; +extern void func_8013CABC(void); +extern s32 D_801E9608; +extern void func_8013CAE8(void); +extern s32 D_801E9638; +extern s32 D_801E963C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E9618; +extern s32 D_801E961C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801EAFCA; +extern u8 D_801EB03E; +extern u8 D_801EAEF2; +extern u8 D_801EAFAC; +extern u8 D_801EAED0; +extern u8 D_801EAEF1; +extern s32 D_801EAFB0; +extern void func_8013D330(void); +extern void *D_801E95F0; +extern void *D_801E95F4; +extern void *D_801E95F8; +extern s32 D_801E9620; +extern s32 D_801E9624; +extern s32 D_801E9628; +extern s32 D_801EAF24[]; +extern u8 D_8018BDAC[]; +extern u8 D_8018BE54[]; +extern u8 D_8018BD04[]; +extern u8 D_8018BE00[]; +extern u8 D_8018BE80[]; +extern u8 D_8018BD58[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E95FC; +extern s32 D_801E962C; +extern s32 D_801E9630; +extern s32 D_801E9634; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E9614; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018C90C; +extern s32 D_80115188; +extern s16 D_8018C8E4; +extern s16 D_8018C8E6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018C8E8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018C5C4; +extern u8 *D_8018C5C8; +extern u8 *D_8018C5CC; +extern u8 *D_8018C5D0; +extern u8 *D_8018C5D4; +extern u16 *D_8018C5D8[]; +extern u16 *D_8018C5E0[]; +extern u16 *D_8018C600[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018C5C4; + iVar2 = func_80028D58(); + puVar3 = D_8018C5D8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018C5C8; + iVar2 = func_80028DE0(); + puVar3 = D_8018C5D8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018C5CC + 0x18) = *D_8018C5E0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018C5D0 + 0x18) = *D_8018C5E0[iVar2]; + + puVar1 = D_8018C5D4; + iVar2 = func_80028D9C(); + puVar3 = D_8018C600[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018C500; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018C500); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018C510; +extern char *D_8018C530; +extern char *D_8018C534; +extern char *D_8018C538; +extern char *D_8018C53C; +extern char *D_8018C540; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018C510); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018C530; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C534; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C538; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C53C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C540; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018C3CA; +extern unsigned short D_8018C3CE; +extern unsigned short D_8018C3D2; +extern unsigned short D_8018C3D6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018C3CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C3CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C3D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C3D6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018C960[])(void); + +void func_80141788(void) +{ + D_8018C960[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018C96C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018C96C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018C8E4; +extern s16 D_8018C8E6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018C584; + extern u8 D_8018C59C; + extern u8 D_8018C610; + extern u8 D_8018C618; + extern void *D_801E9648; + extern void *D_801E964C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E9648 = &D_8018C584; + D_801E964C = &D_8018C610; + } else { + D_801E9648 = &D_8018C59C; + D_801E964C = &D_8018C618; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018C8E4 = 0xE; + D_8018C8E6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018C8E8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018C8E8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018C8E8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018C8C0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018C8C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018C990[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018C990[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018C9A0[])(void); + +void func_801425CC(void *a0) { + D_8018C9A0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018C984; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018C984); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C9B4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C9B4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C9D0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C9D0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CBA0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CBA0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CC58[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CC58[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E8B2C; +extern u8 D_801E9650; +extern u8 D_801E9651; +extern u8 D_801E9652; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E8B2C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E9650 = mul * (local.b[0] >> 4); + D_801E9651 = mul * (local.b[1] >> 4); + D_801E9652 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018C9A8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C9A8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C9C4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C9C4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018CB90[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018CB90[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018CBB0[]; +extern unsigned char D_8018CC10[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018CBB0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018CC10); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E8B28; +extern u8 D_801E9650; +extern u8 D_801E9654; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E8B28, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E9650); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E9650, 0x10); + memcpy(&D_801E9654, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018CD68[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018CD68[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018CE90[])(void); + +void func_80143B30(void *a0) { + D_8018CE90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018CE9C[])(void); + +void func_80143C38(void *a0) { + D_8018CE9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018CEA4[])(void); + +void func_80143C98(void *a0) { + D_8018CEA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80143D28); + + +extern void (*D_8018CEEC[])(void); + +void func_80143E68(void *a0) { + D_8018CEEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018CF00[])(void); + +void func_80144054(void *a0) { + D_8018CF00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018CF08[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018CF08[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018CE84; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018CE84, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018CE98; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CE98 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CE98 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018CEAC; +extern u8 D_8018CEB8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CEAC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CEB8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018CE84; +extern u8 D_8018CEF4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018CE84, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018CEF4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018CF10[])(void); + +void func_801449C8(void *a0) { + D_8018CF10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018CF18[])(void); + +void func_80144A2C(void *a0) { + D_8018CF18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c b/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c index 849bc7756..f1148ae87 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018C5C4; -extern u8 *D_8018C5C8; -extern u8 *D_8018C5CC; -extern u8 *D_8018C5D0; -extern u8 *D_8018C5D4; -extern u16 *D_8018C5D8[]; -extern u16 *D_8018C5E0[]; -extern u16 *D_8018C600[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018C5C4; - iVar2 = func_80028D58(); - puVar3 = D_8018C5D8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018C5C8; - iVar2 = func_80028DE0(); - puVar3 = D_8018C5D8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018C5CC + 0x18) = *D_8018C5E0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018C5D0 + 0x18) = *D_8018C5E0[iVar2]; - - puVar1 = D_8018C5D4; - iVar2 = func_80028D9C(); - puVar3 = D_8018C600[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018C500; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018C500); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018C510; -extern char *D_8018C530; -extern char *D_8018C534; -extern char *D_8018C538; -extern char *D_8018C53C; -extern char *D_8018C540; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018C510); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018C530; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C534; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C538; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C53C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C540; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018C3CA; -extern unsigned short D_8018C3CE; -extern unsigned short D_8018C3D2; -extern unsigned short D_8018C3D6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018C3CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C3CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C3D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C3D6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018C960[])(void); - -void func_80141788(void) -{ - D_8018C960[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018C96C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018C96C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018C8E4; -extern s16 D_8018C8E6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018C584; - extern u8 D_8018C59C; - extern u8 D_8018C610; - extern u8 D_8018C618; - extern void *D_801E9648; - extern void *D_801E964C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E9648 = &D_8018C584; - D_801E964C = &D_8018C610; - } else { - D_801E9648 = &D_8018C59C; - D_801E964C = &D_8018C618; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018C8E4 = 0xE; - D_8018C8E6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018C8E8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018C8E8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018C8E8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018C8C0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018C8C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018C990[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018C990[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018C9A0[])(void); - -void func_801425CC(void *a0) { - D_8018C9A0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018C984; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018C984); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C9B4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C9B4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C9D0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C9D0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CBA0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CBA0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CC58[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CC58[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E8B2C; -extern u8 D_801E9650; -extern u8 D_801E9651; -extern u8 D_801E9652; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E8B2C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E9650 = mul * (local.b[0] >> 4); - D_801E9651 = mul * (local.b[1] >> 4); - D_801E9652 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018C9A8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C9A8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C9C4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C9C4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018CB90[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018CB90[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018CBB0[]; -extern unsigned char D_8018CC10[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018CBB0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018CC10); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E8B28; -extern u8 D_801E9650; -extern u8 D_801E9654; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E8B28, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E9650); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E9650, 0x10); - memcpy(&D_801E9654, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018CD68[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018CD68[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018CE90[])(void); - -void func_80143B30(void *a0) { - D_8018CE90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018CE9C[])(void); - -void func_80143C38(void *a0) { - D_8018CE9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018CEA4[])(void); - -void func_80143C98(void *a0) { - D_8018CEA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018CEEC[])(void); - -void func_80143E68(void *a0) { - D_8018CEEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018CF00[])(void); - -void func_80144054(void *a0) { - D_8018CF00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018CF08[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018CF08[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018CE84; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018CE84, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018CE98; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CE98 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CE98 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018CEAC; -extern u8 D_8018CEB8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CEAC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CEB8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018CE84; -extern u8 D_8018CEF4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018CE84, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018CEF4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018CF10[])(void); - -void func_801449C8(void *a0) { - D_8018CF10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018CF18[])(void); - -void func_80144A2C(void *a0) { - D_8018CF18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_015/ov_SC03_015_jr_80140608.c b/src/ov_SC03_015/ov_SC03_015_jr_80140608.c new file mode 100644 index 000000000..eee27a86f --- /dev/null +++ b/src/ov_SC03_015/ov_SC03_015_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E819C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018B804[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E9504; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801EAFD0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E819C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018B540)(); +extern s16 (*D_8018B544)(); +extern M2C_UNK (*D_8018B54C)(); +extern s32 (*D_8018B550)(); +extern s32 D_801E9500; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E81A0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018B898; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018ED7C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018B8B0; +extern M2C_UNK D_8018B8B8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018B8C0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018B8DC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018B8E8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018B8FC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018B94C[]; +extern s16 D_8018B97C[]; +extern s16 D_8018B9DC[]; +extern s16 D_8018B9E4[]; +extern s16 D_8018BA04[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018BA3C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018BA94[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018BADC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018BAE4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018BAEC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018BAF4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018BA9C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018BABC; +extern void func_801321B0(int param_1); +extern int D_8018BACC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E9570; +extern s32 D_801E9574[]; +extern int D_801E9578; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018BB00; +extern u8 D_8018BAFC; +extern s16 *D_8018BB04; +extern u8 D_8018BB08; +extern int D_801E9570; +extern u16 D_801E9580; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018BB04; /* holds a pointer value (*(u16**)&D_8018BB04) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018BB18[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018BB6C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018BB70[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018BBB4; +extern u8 D_8018BBF8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018BC3C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018BCB4, D_8018BCB6, D_8018BCB8, D_8018BCBA, D_8018BCBC, D_8018BCBE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E95E8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E95EC; +extern s8 D_801E95ED; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E960C; +extern s32 D_801E9600; +extern s32 D_801E9604; +extern s32 D_801E9610; +extern void func_8013CABC(void); +extern s32 D_801E9608; +extern void func_8013CAE8(void); +extern s32 D_801E9638; +extern s32 D_801E963C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E9618; +extern s32 D_801E961C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801EAFCA; +extern u8 D_801EB03E; +extern u8 D_801EAEF2; +extern u8 D_801EAFAC; +extern u8 D_801EAED0; +extern u8 D_801EAEF1; +extern s32 D_801EAFB0; +extern void func_8013D330(void); +extern void *D_801E95F0; +extern void *D_801E95F4; +extern void *D_801E95F8; +extern s32 D_801E9620; +extern s32 D_801E9624; +extern s32 D_801E9628; +extern s32 D_801EAF24[]; +extern u8 D_8018BDAC[]; +extern u8 D_8018BE54[]; +extern u8 D_8018BD04[]; +extern u8 D_8018BE00[]; +extern u8 D_8018BE80[]; +extern u8 D_8018BD58[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E95FC; +extern s32 D_801E962C; +extern s32 D_801E9630; +extern s32 D_801E9634; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E9614; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018C90C; +extern s32 D_80115188; +extern s16 D_8018C8E4; +extern s16 D_8018C8E6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018C8E8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018C5C4; +extern u8 *D_8018C5C8; +extern u8 *D_8018C5CC; +extern u8 *D_8018C5D0; +extern u8 *D_8018C5D4; +extern u16 *D_8018C5D8[]; +extern u16 *D_8018C5E0[]; +extern u16 *D_8018C600[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018C5C4; + iVar2 = func_80028D58(); + puVar3 = D_8018C5D8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018C5C8; + iVar2 = func_80028DE0(); + puVar3 = D_8018C5D8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018C5CC + 0x18) = *D_8018C5E0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018C5D0 + 0x18) = *D_8018C5E0[iVar2]; + + puVar1 = D_8018C5D4; + iVar2 = func_80028D9C(); + puVar3 = D_8018C600[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018C500; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018C500); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018C510; +extern char *D_8018C530; +extern char *D_8018C534; +extern char *D_8018C538; +extern char *D_8018C53C; +extern char *D_8018C540; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018C510); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018C530; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C534; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C538; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C53C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C540; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018C3CA; +extern unsigned short D_8018C3CE; +extern unsigned short D_8018C3D2; +extern unsigned short D_8018C3D6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018C3CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C3CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C3D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C3D6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018C960[])(void); + +void func_80141788(void) +{ + D_8018C960[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018C96C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018C96C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018C8E4; +extern s16 D_8018C8E6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018C584; + extern u8 D_8018C59C; + extern u8 D_8018C610; + extern u8 D_8018C618; + extern void *D_801E9648; + extern void *D_801E964C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E9648 = &D_8018C584; + D_801E964C = &D_8018C610; + } else { + D_801E9648 = &D_8018C59C; + D_801E964C = &D_8018C618; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018C8E4 = 0xE; + D_8018C8E6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018C8E8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018C8E8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018C8E8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018C8C0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018C8C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018C990[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018C990[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018C9A0[])(void); + +void func_801425CC(void *a0) { + D_8018C9A0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018C984; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018C984); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C9B4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C9B4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C9D0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C9D0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CBA0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CBA0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CC58[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CC58[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E8B2C; +extern u8 D_801E9650; +extern u8 D_801E9651; +extern u8 D_801E9652; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E8B2C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E9650 = mul * (local.b[0] >> 4); + D_801E9651 = mul * (local.b[1] >> 4); + D_801E9652 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018C9A8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C9A8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C9C4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C9C4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018CB90[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018CB90[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018CBB0[]; +extern unsigned char D_8018CC10[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018CBB0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018CC10); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E8B28; +extern u8 D_801E9650; +extern u8 D_801E9654; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E8B28, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E9650); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E9650, 0x10); + memcpy(&D_801E9654, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018CD68[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018CD68[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018CE90[])(void); + +void func_80143B30(void *a0) { + D_8018CE90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018CE9C[])(void); + +void func_80143C38(void *a0) { + D_8018CE9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018CEA4[])(void); + +void func_80143C98(void *a0) { + D_8018CEA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80143D28); + + +extern void (*D_8018CEEC[])(void); + +void func_80143E68(void *a0) { + D_8018CEEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018CF00[])(void); + +void func_80144054(void *a0) { + D_8018CF00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018CF08[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018CF08[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018CE84; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018CE84, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018CE98; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018CE98 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018CE98 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018CEAC; +extern u8 D_8018CEB8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018CEAC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018CEB8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018CE84; +extern u8 D_8018CEF4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018CE84, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018CEF4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018CF10[])(void); + +void func_801449C8(void *a0) { + D_8018CF10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018CF18[])(void); + +void func_80144A2C(void *a0) { + D_8018CF18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c b/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c index 49919cd51..e5c243832 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FF40; -extern u8 *D_8017FF44; -extern u8 *D_8017FF48; -extern u8 *D_8017FF4C; -extern u8 *D_8017FF50; -extern u16 *D_8017FF54[]; -extern u16 *D_8017FF5C[]; -extern u16 *D_8017FF7C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FF40; - iVar2 = func_80028D58(); - puVar3 = D_8017FF54[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FF44; - iVar2 = func_80028DE0(); - puVar3 = D_8017FF54[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FF48 + 0x18) = *D_8017FF5C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FF4C + 0x18) = *D_8017FF5C[iVar2]; - - puVar1 = D_8017FF50; - iVar2 = func_80028D9C(); - puVar3 = D_8017FF7C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017FE7C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017FE7C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017FE8C; -extern char *D_8017FEAC; -extern char *D_8017FEB0; -extern char *D_8017FEB4; -extern char *D_8017FEB8; -extern char *D_8017FEBC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017FE8C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FEAC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FEB0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FEB4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FEB8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FEBC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017FD46; -extern unsigned short D_8017FD4A; -extern unsigned short D_8017FD4E; -extern unsigned short D_8017FD52; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017FD46; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FD4A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FD4E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FD52; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801802DC[])(void); - -void func_80141788(void) -{ - D_801802DC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801802E8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801802E8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80180260; -extern s16 D_80180262; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017FF00; - extern u8 D_8017FF18; - extern u8 D_8017FF8C; - extern u8 D_8017FF94; - extern void *D_80197A20; - extern void *D_80197A24; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80197A20 = &D_8017FF00; - D_80197A24 = &D_8017FF8C; - } else { - D_80197A20 = &D_8017FF18; - D_80197A24 = &D_8017FF94; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80180260 = 0xE; - D_80180262 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80180264: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80180264; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80180264); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018023C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018023C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018030C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018030C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018031C[])(void); - -void func_801425CC(void *a0) { - D_8018031C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180300; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180300); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180330[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180330[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018034C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018034C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018051C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018051C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801805D4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801805D4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80197104; -extern u8 D_80197A28; -extern u8 D_80197A29; -extern u8 D_80197A2A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80197104; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80197A28 = mul * (local.b[0] >> 4); - D_80197A29 = mul * (local.b[1] >> 4); - D_80197A2A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180324; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180324); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180340[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180340); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018050C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018050C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018052C[]; -extern unsigned char D_8018058C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018052C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018058C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80197100; -extern u8 D_80197A28; -extern u8 D_80197A2C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80197100, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80197A28); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80197A28, 0x10); - memcpy(&D_80197A2C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801806E4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801806E4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018080C[])(void); - -void func_80143B30(void *a0) { - D_8018080C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180818[])(void); - -void func_80143C38(void *a0) { - D_80180818[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180820[])(void); - -void func_80143C98(void *a0) { - D_80180820[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180868[])(void); - -void func_80143E68(void *a0) { - D_80180868[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018087C[])(void); - -void func_80144054(void *a0) { - D_8018087C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180884[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180884[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180800; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180800, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180814; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180814 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180814 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180828; -extern u8 D_80180834; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180828); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180834); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180800; -extern u8 D_80180870; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180800, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180870, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018088C[])(void); - -void func_801449C8(void *a0) { - D_8018088C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180894[])(void); - -void func_80144A2C(void *a0) { - D_80180894[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_023/ov_SC03_023_jr_80140608.c b/src/ov_SC03_023/ov_SC03_023_jr_80140608.c new file mode 100644 index 000000000..deeb683a6 --- /dev/null +++ b/src/ov_SC03_023/ov_SC03_023_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80196774; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F180[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801978DC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80198D18; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80196774; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EEBC)(); +extern s16 (*D_8017EEC0)(); +extern M2C_UNK (*D_8017EEC8)(); +extern s32 (*D_8017EECC)(); +extern s32 D_801978D8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80196778; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F214; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801826F8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F22C; +extern M2C_UNK D_8017F234; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F23C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F258[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F264[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F278[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F2C8[]; +extern s16 D_8017F2F8[]; +extern s16 D_8017F358[]; +extern s16 D_8017F360[]; +extern s16 D_8017F380[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F3B8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F410[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F458[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F460[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F468[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F470[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F418; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F438; +extern void func_801321B0(int param_1); +extern int D_8017F448; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80197948; +extern s32 D_8019794C[]; +extern int D_80197950; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F47C; +extern u8 D_8017F478; +extern s16 *D_8017F480; +extern u8 D_8017F484; +extern int D_80197948; +extern u16 D_80197958; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F480; /* holds a pointer value (*(u16**)&D_8017F480) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F494[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F4E8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F4EC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F530; +extern u8 D_8017F574; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F5B8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F630, D_8017F632, D_8017F634, D_8017F636, D_8017F638, D_8017F63A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801979C0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801979C4; +extern s8 D_801979C5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801979E4; +extern s32 D_801979D8; +extern s32 D_801979DC; +extern s32 D_801979E8; +extern void func_8013CABC(void); +extern s32 D_801979E0; +extern void func_8013CAE8(void); +extern s32 D_80197A10; +extern s32 D_80197A14; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801979F0; +extern s32 D_801979F4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_80198D12; +extern u8 D_80198D86; +extern u8 D_80198C3A; +extern u8 D_80198CF4; +extern u8 D_80198C18; +extern u8 D_80198C39; +extern s32 D_80198CF8; +extern void func_8013D330(void); +extern void *D_801979C8; +extern void *D_801979CC; +extern void *D_801979D0; +extern s32 D_801979F8; +extern s32 D_801979FC; +extern s32 D_80197A00; +extern s32 D_80198C6C[]; +extern u8 D_8017F728[]; +extern u8 D_8017F7D0[]; +extern u8 D_8017F680[]; +extern u8 D_8017F77C[]; +extern u8 D_8017F7FC[]; +extern u8 D_8017F6D4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801979D4; +extern s32 D_80197A04; +extern s32 D_80197A08; +extern s32 D_80197A0C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801979EC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180288; +extern s32 D_80115188; +extern s16 D_80180260; +extern s16 D_80180262; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80180264; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FF40; +extern u8 *D_8017FF44; +extern u8 *D_8017FF48; +extern u8 *D_8017FF4C; +extern u8 *D_8017FF50; +extern u16 *D_8017FF54[]; +extern u16 *D_8017FF5C[]; +extern u16 *D_8017FF7C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FF40; + iVar2 = func_80028D58(); + puVar3 = D_8017FF54[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FF44; + iVar2 = func_80028DE0(); + puVar3 = D_8017FF54[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FF48 + 0x18) = *D_8017FF5C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FF4C + 0x18) = *D_8017FF5C[iVar2]; + + puVar1 = D_8017FF50; + iVar2 = func_80028D9C(); + puVar3 = D_8017FF7C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017FE7C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017FE7C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017FE8C; +extern char *D_8017FEAC; +extern char *D_8017FEB0; +extern char *D_8017FEB4; +extern char *D_8017FEB8; +extern char *D_8017FEBC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017FE8C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FEAC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FEB0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FEB4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FEB8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FEBC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017FD46; +extern unsigned short D_8017FD4A; +extern unsigned short D_8017FD4E; +extern unsigned short D_8017FD52; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017FD46; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FD4A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FD4E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FD52; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801802DC[])(void); + +void func_80141788(void) +{ + D_801802DC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801802E8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801802E8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80180260; +extern s16 D_80180262; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017FF00; + extern u8 D_8017FF18; + extern u8 D_8017FF8C; + extern u8 D_8017FF94; + extern void *D_80197A20; + extern void *D_80197A24; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80197A20 = &D_8017FF00; + D_80197A24 = &D_8017FF8C; + } else { + D_80197A20 = &D_8017FF18; + D_80197A24 = &D_8017FF94; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80180260 = 0xE; + D_80180262 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80180264: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80180264; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80180264); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018023C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018023C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018030C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018030C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018031C[])(void); + +void func_801425CC(void *a0) { + D_8018031C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180300; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180300); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180330[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180330[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018034C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018034C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018051C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018051C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801805D4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801805D4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80197104; +extern u8 D_80197A28; +extern u8 D_80197A29; +extern u8 D_80197A2A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80197104; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80197A28 = mul * (local.b[0] >> 4); + D_80197A29 = mul * (local.b[1] >> 4); + D_80197A2A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180324; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180324); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180340[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180340); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018050C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018050C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018052C[]; +extern unsigned char D_8018058C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018052C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018058C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80197100; +extern u8 D_80197A28; +extern u8 D_80197A2C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80197100, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80197A28); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80197A28, 0x10); + memcpy(&D_80197A2C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801806E4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801806E4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018080C[])(void); + +void func_80143B30(void *a0) { + D_8018080C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180818[])(void); + +void func_80143C38(void *a0) { + D_80180818[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180820[])(void); + +void func_80143C98(void *a0) { + D_80180820[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80143D28); + + +extern void (*D_80180868[])(void); + +void func_80143E68(void *a0) { + D_80180868[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018087C[])(void); + +void func_80144054(void *a0) { + D_8018087C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180884[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180884[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180800; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180800, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180814; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180814 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180814 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180828; +extern u8 D_80180834; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180828); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180834); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180800; +extern u8 D_80180870; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180800, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180870, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018088C[])(void); + +void func_801449C8(void *a0) { + D_8018088C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180894[])(void); + +void func_80144A2C(void *a0) { + D_80180894[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c b/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c index 392b5d4e0..68863c3a4 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80187F64; -extern u8 *D_80187F68; -extern u8 *D_80187F6C; -extern u8 *D_80187F70; -extern u8 *D_80187F74; -extern u16 *D_80187F78[]; -extern u16 *D_80187F80[]; -extern u16 *D_80187FA0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80187F64; - iVar2 = func_80028D58(); - puVar3 = D_80187F78[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80187F68; - iVar2 = func_80028DE0(); - puVar3 = D_80187F78[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80187F6C + 0x18) = *D_80187F80[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80187F70 + 0x18) = *D_80187F80[iVar2]; - - puVar1 = D_80187F74; - iVar2 = func_80028D9C(); - puVar3 = D_80187FA0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80187EA0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80187EA0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80187EB0; -extern char *D_80187ED0; -extern char *D_80187ED4; -extern char *D_80187ED8; -extern char *D_80187EDC; -extern char *D_80187EE0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80187EB0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80187ED0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187ED4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187ED8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187EDC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187EE0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80187D6A; -extern unsigned short D_80187D6E; -extern unsigned short D_80187D72; -extern unsigned short D_80187D76; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80187D6A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80187D6E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80187D72; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80187D76; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80188300[])(void); - -void func_80141788(void) -{ - D_80188300[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018830C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018830C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80188284; -extern s16 D_80188286; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80187F24; - extern u8 D_80187F3C; - extern u8 D_80187FB0; - extern u8 D_80187FB8; - extern void *D_801BFFB8; - extern void *D_801BFFBC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801BFFB8 = &D_80187F24; - D_801BFFBC = &D_80187FB0; - } else { - D_801BFFB8 = &D_80187F3C; - D_801BFFBC = &D_80187FB8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80188284 = 0xE; - D_80188286 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80188288: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80188288; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80188288); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80188260; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80188260 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80188330[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80188330[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80188340[])(void); - -void func_801425CC(void *a0) { - D_80188340[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80188324; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80188324); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188354[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188354[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188370[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188370[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188540[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188540[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801885F8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801885F8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801BF58C; -extern u8 D_801BFFC0; -extern u8 D_801BFFC1; -extern u8 D_801BFFC2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801BF58C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801BFFC0 = mul * (local.b[0] >> 4); - D_801BFFC1 = mul * (local.b[1] >> 4); - D_801BFFC2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80188348; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188348); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188364[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188364); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80188530[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80188530[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188550[]; -extern unsigned char D_801885B0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188550); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801885B0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801BF588; -extern u8 D_801BFFC0; -extern u8 D_801BFFC4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801BF588, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801BFFC0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801BFFC0, 0x10); - memcpy(&D_801BFFC4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80188708[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80188708[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80188830[])(void); - -void func_80143B30(void *a0) { - D_80188830[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018883C[])(void); - -void func_80143C38(void *a0) { - D_8018883C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80188844[])(void); - -void func_80143C98(void *a0) { - D_80188844[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018888C[])(void); - -void func_80143E68(void *a0) { - D_8018888C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801888A0[])(void); - -void func_80144054(void *a0) { - D_801888A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801888A8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801888A8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80188824; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80188824, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80188838; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188838 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188838 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018884C; -extern u8 D_80188858; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018884C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188858); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80188824; -extern u8 D_80188894; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80188824, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80188894, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801888B0[])(void); - -void func_801449C8(void *a0) { - D_801888B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801888B8[])(void); - -void func_80144A2C(void *a0) { - D_801888B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_024/ov_SC03_024_jr_80140608.c b/src/ov_SC03_024/ov_SC03_024_jr_80140608.c new file mode 100644 index 000000000..2e2b48ae1 --- /dev/null +++ b/src/ov_SC03_024/ov_SC03_024_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801BEBFC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801871A4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801BFE74; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C17E0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801BEBFC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80186EE0)(); +extern s16 (*D_80186EE4)(); +extern M2C_UNK (*D_80186EEC)(); +extern s32 (*D_80186EF0)(); +extern s32 D_801BFE70; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801BEC00; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80187238; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018A71C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80187250; +extern M2C_UNK D_80187258; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80187260; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018727C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80187288[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018729C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801872EC[]; +extern s16 D_8018731C[]; +extern s16 D_8018737C[]; +extern s16 D_80187384[]; +extern s16 D_801873A4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801873DC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80187434[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018747C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80187484[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018748C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80187494[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018743C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018745C; +extern void func_801321B0(int param_1); +extern int D_8018746C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801BFEE0; +extern s32 D_801BFEE4[]; +extern int D_801BFEE8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801874A0; +extern u8 D_8018749C; +extern s16 *D_801874A4; +extern u8 D_801874A8; +extern int D_801BFEE0; +extern u16 D_801BFEF0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801874A4; /* holds a pointer value (*(u16**)&D_801874A4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801874B8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018750C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80187510[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80187554; +extern u8 D_80187598; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801875DC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80187654, D_80187656, D_80187658, D_8018765A, D_8018765C, D_8018765E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801BFF58; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801BFF5C; +extern s8 D_801BFF5D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801BFF7C; +extern s32 D_801BFF70; +extern s32 D_801BFF74; +extern s32 D_801BFF80; +extern void func_8013CABC(void); +extern s32 D_801BFF78; +extern void func_8013CAE8(void); +extern s32 D_801BFFA8; +extern s32 D_801BFFAC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801BFF88; +extern s32 D_801BFF8C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C17DA; +extern u8 D_801C184E; +extern u8 D_801C1702; +extern u8 D_801C17BC; +extern u8 D_801C16E0; +extern u8 D_801C1701; +extern s32 D_801C17C0; +extern void func_8013D330(void); +extern void *D_801BFF60; +extern void *D_801BFF64; +extern void *D_801BFF68; +extern s32 D_801BFF90; +extern s32 D_801BFF94; +extern s32 D_801BFF98; +extern s32 D_801C1734[]; +extern u8 D_8018774C[]; +extern u8 D_801877F4[]; +extern u8 D_801876A4[]; +extern u8 D_801877A0[]; +extern u8 D_80187820[]; +extern u8 D_801876F8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801BFF6C; +extern s32 D_801BFF9C; +extern s32 D_801BFFA0; +extern s32 D_801BFFA4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801BFF84; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801882AC; +extern s32 D_80115188; +extern s16 D_80188284; +extern s16 D_80188286; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80188288; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80187F64; +extern u8 *D_80187F68; +extern u8 *D_80187F6C; +extern u8 *D_80187F70; +extern u8 *D_80187F74; +extern u16 *D_80187F78[]; +extern u16 *D_80187F80[]; +extern u16 *D_80187FA0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80187F64; + iVar2 = func_80028D58(); + puVar3 = D_80187F78[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80187F68; + iVar2 = func_80028DE0(); + puVar3 = D_80187F78[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80187F6C + 0x18) = *D_80187F80[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80187F70 + 0x18) = *D_80187F80[iVar2]; + + puVar1 = D_80187F74; + iVar2 = func_80028D9C(); + puVar3 = D_80187FA0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80187EA0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80187EA0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80187EB0; +extern char *D_80187ED0; +extern char *D_80187ED4; +extern char *D_80187ED8; +extern char *D_80187EDC; +extern char *D_80187EE0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80187EB0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80187ED0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187ED4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187ED8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187EDC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187EE0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80187D6A; +extern unsigned short D_80187D6E; +extern unsigned short D_80187D72; +extern unsigned short D_80187D76; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80187D6A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80187D6E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80187D72; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80187D76; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80188300[])(void); + +void func_80141788(void) +{ + D_80188300[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018830C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018830C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80188284; +extern s16 D_80188286; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80187F24; + extern u8 D_80187F3C; + extern u8 D_80187FB0; + extern u8 D_80187FB8; + extern void *D_801BFFB8; + extern void *D_801BFFBC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801BFFB8 = &D_80187F24; + D_801BFFBC = &D_80187FB0; + } else { + D_801BFFB8 = &D_80187F3C; + D_801BFFBC = &D_80187FB8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80188284 = 0xE; + D_80188286 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80188288: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80188288; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80188288); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80188260; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80188260 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80188330[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80188330[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80188340[])(void); + +void func_801425CC(void *a0) { + D_80188340[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80188324; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80188324); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188354[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188354[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188370[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188370[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188540[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188540[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801885F8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801885F8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801BF58C; +extern u8 D_801BFFC0; +extern u8 D_801BFFC1; +extern u8 D_801BFFC2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801BF58C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801BFFC0 = mul * (local.b[0] >> 4); + D_801BFFC1 = mul * (local.b[1] >> 4); + D_801BFFC2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80188348; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188348); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188364[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188364); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80188530[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80188530[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188550[]; +extern unsigned char D_801885B0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188550); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801885B0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801BF588; +extern u8 D_801BFFC0; +extern u8 D_801BFFC4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801BF588, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801BFFC0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801BFFC0, 0x10); + memcpy(&D_801BFFC4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80188708[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80188708[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80188830[])(void); + +void func_80143B30(void *a0) { + D_80188830[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018883C[])(void); + +void func_80143C38(void *a0) { + D_8018883C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80188844[])(void); + +void func_80143C98(void *a0) { + D_80188844[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80143D28); + + +extern void (*D_8018888C[])(void); + +void func_80143E68(void *a0) { + D_8018888C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801888A0[])(void); + +void func_80144054(void *a0) { + D_801888A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801888A8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801888A8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188824; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80188824, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80188838; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188838 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188838 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018884C; +extern u8 D_80188858; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018884C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188858); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80188824; +extern u8 D_80188894; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80188824, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80188894, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801888B0[])(void); + +void func_801449C8(void *a0) { + D_801888B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801888B8[])(void); + +void func_80144A2C(void *a0) { + D_801888B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c b/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c index f09fd56b0..de357674f 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018CA30; -extern u8 *D_8018CA34; -extern u8 *D_8018CA38; -extern u8 *D_8018CA3C; -extern u8 *D_8018CA40; -extern u16 *D_8018CA44[]; -extern u16 *D_8018CA4C[]; -extern u16 *D_8018CA6C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018CA30; - iVar2 = func_80028D58(); - puVar3 = D_8018CA44[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018CA34; - iVar2 = func_80028DE0(); - puVar3 = D_8018CA44[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018CA38 + 0x18) = *D_8018CA4C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018CA3C + 0x18) = *D_8018CA4C[iVar2]; - - puVar1 = D_8018CA40; - iVar2 = func_80028D9C(); - puVar3 = D_8018CA6C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018C96C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018C96C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018C97C; -extern char *D_8018C99C; -extern char *D_8018C9A0; -extern char *D_8018C9A4; -extern char *D_8018C9A8; -extern char *D_8018C9AC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018C97C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018C99C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C9A0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C9A4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C9A8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018C9AC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018C836; -extern unsigned short D_8018C83A; -extern unsigned short D_8018C83E; -extern unsigned short D_8018C842; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018C836; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C83A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C83E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C842; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018CDCC[])(void); - -void func_80141788(void) -{ - D_8018CDCC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018CDD8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018CDD8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018CD50; -extern s16 D_8018CD52; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018C9F0; - extern u8 D_8018CA08; - extern u8 D_8018CA7C; - extern u8 D_8018CA84; - extern void *D_801EA2F0; - extern void *D_801EA2F4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801EA2F0 = &D_8018C9F0; - D_801EA2F4 = &D_8018CA7C; - } else { - D_801EA2F0 = &D_8018CA08; - D_801EA2F4 = &D_8018CA84; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018CD50 = 0xE; - D_8018CD52 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018CD54: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018CD54; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018CD54); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018CD2C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018CD2C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018CDFC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018CDFC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018CE0C[])(void); - -void func_801425CC(void *a0) { - D_8018CE0C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018CDF0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018CDF0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CE20[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CE20[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CE3C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CE3C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018D00C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018D00C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018D0C4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018D0C4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E9714; -extern u8 D_801EA2F8; -extern u8 D_801EA2F9; -extern u8 D_801EA2FA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E9714; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801EA2F8 = mul * (local.b[0] >> 4); - D_801EA2F9 = mul * (local.b[1] >> 4); - D_801EA2FA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018CE14; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018CE14); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018CE30[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018CE30); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018CFFC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018CFFC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018D01C[]; -extern unsigned char D_8018D07C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018D01C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018D07C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E9710; -extern u8 D_801EA2F8; -extern u8 D_801EA2FC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E9710, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801EA2F8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801EA2F8, 0x10); - memcpy(&D_801EA2FC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018D1D4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018D1D4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018D2FC[])(void); - -void func_80143B30(void *a0) { - D_8018D2FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018D308[])(void); - -void func_80143C38(void *a0) { - D_8018D308[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018D310[])(void); - -void func_80143C98(void *a0) { - D_8018D310[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018D358[])(void); - -void func_80143E68(void *a0) { - D_8018D358[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018D36C[])(void); - -void func_80144054(void *a0) { - D_8018D36C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018D374[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018D374[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018D2F0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018D2F0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018D304; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018D304 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018D304 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018D318; -extern u8 D_8018D324; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018D318); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018D324); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018D2F0; -extern u8 D_8018D360; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018D2F0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018D360, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018D37C[])(void); - -void func_801449C8(void *a0) { - D_8018D37C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018D384[])(void); - -void func_80144A2C(void *a0) { - D_8018D384[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_028/ov_SC03_028_jr_80140608.c b/src/ov_SC03_028/ov_SC03_028_jr_80140608.c new file mode 100644 index 000000000..ede0fed59 --- /dev/null +++ b/src/ov_SC03_028/ov_SC03_028_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E8D84; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018BC70[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801EA1AC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801EC598; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E8D84; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018B9AC)(); +extern s16 (*D_8018B9B0)(); +extern M2C_UNK (*D_8018B9B8)(); +extern s32 (*D_8018B9BC)(); +extern s32 D_801EA1A8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E8D88; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018BD04; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018F1E8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018BD1C; +extern M2C_UNK D_8018BD24; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018BD2C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018BD48[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018BD54[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018BD68[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018BDB8[]; +extern s16 D_8018BDE8[]; +extern s16 D_8018BE48[]; +extern s16 D_8018BE50[]; +extern s16 D_8018BE70[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018BEA8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018BF00[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018BF48[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018BF50[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018BF58[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018BF60[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018BF08; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018BF28; +extern void func_801321B0(int param_1); +extern int D_8018BF38; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801EA218; +extern s32 D_801EA21C[]; +extern int D_801EA220; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018BF6C; +extern u8 D_8018BF68; +extern s16 *D_8018BF70; +extern u8 D_8018BF74; +extern int D_801EA218; +extern u16 D_801EA228; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018BF70; /* holds a pointer value (*(u16**)&D_8018BF70) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018BF84[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018BFD8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018BFDC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018C020; +extern u8 D_8018C064; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018C0A8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018C120, D_8018C122, D_8018C124, D_8018C126, D_8018C128, D_8018C12A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801EA290; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801EA294; +extern s8 D_801EA295; +extern void func_8013C9C4(void * arg0); +extern s32 D_801EA2B4; +extern s32 D_801EA2A8; +extern s32 D_801EA2AC; +extern s32 D_801EA2B8; +extern void func_8013CABC(void); +extern s32 D_801EA2B0; +extern void func_8013CAE8(void); +extern s32 D_801EA2E0; +extern s32 D_801EA2E4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801EA2C0; +extern s32 D_801EA2C4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801EC592; +extern u8 D_801EC606; +extern u8 D_801EC4BA; +extern u8 D_801EC574; +extern u8 D_801EC498; +extern u8 D_801EC4B9; +extern s32 D_801EC578; +extern void func_8013D330(void); +extern void *D_801EA298; +extern void *D_801EA29C; +extern void *D_801EA2A0; +extern s32 D_801EA2C8; +extern s32 D_801EA2CC; +extern s32 D_801EA2D0; +extern s32 D_801EC4EC[]; +extern u8 D_8018C218[]; +extern u8 D_8018C2C0[]; +extern u8 D_8018C170[]; +extern u8 D_8018C26C[]; +extern u8 D_8018C2EC[]; +extern u8 D_8018C1C4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801EA2A4; +extern s32 D_801EA2D4; +extern s32 D_801EA2D8; +extern s32 D_801EA2DC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801EA2BC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018CD78; +extern s32 D_80115188; +extern s16 D_8018CD50; +extern s16 D_8018CD52; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018CD54; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018CA30; +extern u8 *D_8018CA34; +extern u8 *D_8018CA38; +extern u8 *D_8018CA3C; +extern u8 *D_8018CA40; +extern u16 *D_8018CA44[]; +extern u16 *D_8018CA4C[]; +extern u16 *D_8018CA6C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018CA30; + iVar2 = func_80028D58(); + puVar3 = D_8018CA44[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018CA34; + iVar2 = func_80028DE0(); + puVar3 = D_8018CA44[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018CA38 + 0x18) = *D_8018CA4C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018CA3C + 0x18) = *D_8018CA4C[iVar2]; + + puVar1 = D_8018CA40; + iVar2 = func_80028D9C(); + puVar3 = D_8018CA6C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018C96C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018C96C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018C97C; +extern char *D_8018C99C; +extern char *D_8018C9A0; +extern char *D_8018C9A4; +extern char *D_8018C9A8; +extern char *D_8018C9AC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018C97C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018C99C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C9A0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C9A4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C9A8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018C9AC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018C836; +extern unsigned short D_8018C83A; +extern unsigned short D_8018C83E; +extern unsigned short D_8018C842; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018C836; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C83A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C83E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C842; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018CDCC[])(void); + +void func_80141788(void) +{ + D_8018CDCC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018CDD8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018CDD8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018CD50; +extern s16 D_8018CD52; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018C9F0; + extern u8 D_8018CA08; + extern u8 D_8018CA7C; + extern u8 D_8018CA84; + extern void *D_801EA2F0; + extern void *D_801EA2F4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801EA2F0 = &D_8018C9F0; + D_801EA2F4 = &D_8018CA7C; + } else { + D_801EA2F0 = &D_8018CA08; + D_801EA2F4 = &D_8018CA84; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018CD50 = 0xE; + D_8018CD52 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018CD54: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018CD54; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018CD54); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018CD2C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018CD2C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018CDFC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018CDFC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018CE0C[])(void); + +void func_801425CC(void *a0) { + D_8018CE0C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018CDF0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018CDF0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CE20[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CE20[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CE3C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CE3C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018D00C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018D00C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018D0C4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018D0C4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E9714; +extern u8 D_801EA2F8; +extern u8 D_801EA2F9; +extern u8 D_801EA2FA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E9714; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801EA2F8 = mul * (local.b[0] >> 4); + D_801EA2F9 = mul * (local.b[1] >> 4); + D_801EA2FA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018CE14; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018CE14); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018CE30[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018CE30); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018CFFC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018CFFC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018D01C[]; +extern unsigned char D_8018D07C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018D01C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018D07C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E9710; +extern u8 D_801EA2F8; +extern u8 D_801EA2FC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E9710, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801EA2F8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801EA2F8, 0x10); + memcpy(&D_801EA2FC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018D1D4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018D1D4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018D2FC[])(void); + +void func_80143B30(void *a0) { + D_8018D2FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018D308[])(void); + +void func_80143C38(void *a0) { + D_8018D308[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018D310[])(void); + +void func_80143C98(void *a0) { + D_8018D310[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80143D28); + + +extern void (*D_8018D358[])(void); + +void func_80143E68(void *a0) { + D_8018D358[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018D36C[])(void); + +void func_80144054(void *a0) { + D_8018D36C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018D374[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018D374[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018D2F0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018D2F0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018D304; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018D304 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018D304 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018D318; +extern u8 D_8018D324; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018D318); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018D324); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018D2F0; +extern u8 D_8018D360; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018D2F0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018D360, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018D37C[])(void); + +void func_801449C8(void *a0) { + D_8018D37C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018D384[])(void); + +void func_80144A2C(void *a0) { + D_8018D384[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c b/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c index be3ab7296..b35f68ed1 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80188868; -extern u8 *D_8018886C; -extern u8 *D_80188870; -extern u8 *D_80188874; -extern u8 *D_80188878; -extern u16 *D_8018887C[]; -extern u16 *D_80188884[]; -extern u16 *D_801888A4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80188868; - iVar2 = func_80028D58(); - puVar3 = D_8018887C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018886C; - iVar2 = func_80028DE0(); - puVar3 = D_8018887C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80188870 + 0x18) = *D_80188884[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80188874 + 0x18) = *D_80188884[iVar2]; - - puVar1 = D_80188878; - iVar2 = func_80028D9C(); - puVar3 = D_801888A4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801887A4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801887A4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801887B4; -extern char *D_801887D4; -extern char *D_801887D8; -extern char *D_801887DC; -extern char *D_801887E0; -extern char *D_801887E4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801887B4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801887D4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801887D8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801887DC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801887E0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801887E4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018866E; -extern unsigned short D_80188672; -extern unsigned short D_80188676; -extern unsigned short D_8018867A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018866E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80188672; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80188676; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018867A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80188C04[])(void); - -void func_80141788(void) -{ - D_80188C04[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80188C10[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80188C10[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80188B88; -extern s16 D_80188B8A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80188828; - extern u8 D_80188840; - extern u8 D_801888B4; - extern u8 D_801888BC; - extern void *D_801D82C8; - extern void *D_801D82CC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D82C8 = &D_80188828; - D_801D82CC = &D_801888B4; - } else { - D_801D82C8 = &D_80188840; - D_801D82CC = &D_801888BC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80188B88 = 0xE; - D_80188B8A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80188B8C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80188B8C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80188B8C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80188B64; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80188B64 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80188C34[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80188C34[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80188C44[])(void); - -void func_801425CC(void *a0) { - D_80188C44[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80188C28; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80188C28); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188C58[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188C58[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188C74[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188C74[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188E44[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188E44[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188EFC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188EFC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D7848; -extern u8 D_801D82D0; -extern u8 D_801D82D1; -extern u8 D_801D82D2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D7848; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D82D0 = mul * (local.b[0] >> 4); - D_801D82D1 = mul * (local.b[1] >> 4); - D_801D82D2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80188C4C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188C4C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188C68[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188C68); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80188E34[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80188E34[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188E54[]; -extern unsigned char D_80188EB4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188E54); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80188EB4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D7844; -extern u8 D_801D82D0; -extern u8 D_801D82D4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D7844, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D82D0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D82D0, 0x10); - memcpy(&D_801D82D4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018900C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018900C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80189134[])(void); - -void func_80143B30(void *a0) { - D_80189134[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80189140[])(void); - -void func_80143C38(void *a0) { - D_80189140[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80189148[])(void); - -void func_80143C98(void *a0) { - D_80189148[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80143D28); - - -extern void (*D_80189190[])(void); - -void func_80143E68(void *a0) { - D_80189190[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801891A4[])(void); - -void func_80144054(void *a0) { - D_801891A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801891AC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801891AC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80189128; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80189128, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018913C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018913C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018913C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80189150; -extern u8 D_8018915C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189150); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018915C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80189128; -extern u8 D_80189198; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80189128, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80189198, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801891B4[])(void); - -void func_801449C8(void *a0) { - D_801891B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801891BC[])(void); - -void func_80144A2C(void *a0) { - D_801891BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_029/ov_SC03_029_jr_80140608.c b/src/ov_SC03_029/ov_SC03_029_jr_80140608.c new file mode 100644 index 000000000..a3f64f935 --- /dev/null +++ b/src/ov_SC03_029/ov_SC03_029_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801D6EB8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80187AA8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D8184; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D99D8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801D6EB8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801877E4)(); +extern s16 (*D_801877E8)(); +extern M2C_UNK (*D_801877F0)(); +extern s32 (*D_801877F4)(); +extern s32 D_801D8180; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801D6EBC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80187B3C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018B020; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80187B54; +extern M2C_UNK D_80187B5C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80187B64; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80187B80[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80187B8C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80187BA0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80187BF0[]; +extern s16 D_80187C20[]; +extern s16 D_80187C80[]; +extern s16 D_80187C88[]; +extern s16 D_80187CA8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80187CE0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80187D38[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80187D80[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80187D88[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80187D90[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80187D98[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80187D40; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80187D60; +extern void func_801321B0(int param_1); +extern int D_80187D70; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D81F0; +extern s32 D_801D81F4[]; +extern int D_801D81F8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80187DA4; +extern u8 D_80187DA0; +extern s16 *D_80187DA8; +extern u8 D_80187DAC; +extern int D_801D81F0; +extern u16 D_801D8200; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80187DA8; /* holds a pointer value (*(u16**)&D_80187DA8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80187DBC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80187E10; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80187E14[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80187E58; +extern u8 D_80187E9C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80187EE0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80187F58, D_80187F5A, D_80187F5C, D_80187F5E, D_80187F60, D_80187F62; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D8268; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D826C; +extern s8 D_801D826D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D828C; +extern s32 D_801D8280; +extern s32 D_801D8284; +extern s32 D_801D8290; +extern void func_8013CABC(void); +extern s32 D_801D8288; +extern void func_8013CAE8(void); +extern s32 D_801D82B8; +extern s32 D_801D82BC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D8298; +extern s32 D_801D829C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D99D2; +extern u8 D_801D9A46; +extern u8 D_801D98FA; +extern u8 D_801D99B4; +extern u8 D_801D98D8; +extern u8 D_801D98F9; +extern s32 D_801D99B8; +extern void func_8013D330(void); +extern void *D_801D8270; +extern void *D_801D8274; +extern void *D_801D8278; +extern s32 D_801D82A0; +extern s32 D_801D82A4; +extern s32 D_801D82A8; +extern s32 D_801D992C[]; +extern u8 D_80188050[]; +extern u8 D_801880F8[]; +extern u8 D_80187FA8[]; +extern u8 D_801880A4[]; +extern u8 D_80188124[]; +extern u8 D_80187FFC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D827C; +extern s32 D_801D82AC; +extern s32 D_801D82B0; +extern s32 D_801D82B4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D8294; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80188BB0; +extern s32 D_80115188; +extern s16 D_80188B88; +extern s16 D_80188B8A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80188B8C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80188868; +extern u8 *D_8018886C; +extern u8 *D_80188870; +extern u8 *D_80188874; +extern u8 *D_80188878; +extern u16 *D_8018887C[]; +extern u16 *D_80188884[]; +extern u16 *D_801888A4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80188868; + iVar2 = func_80028D58(); + puVar3 = D_8018887C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018886C; + iVar2 = func_80028DE0(); + puVar3 = D_8018887C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80188870 + 0x18) = *D_80188884[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80188874 + 0x18) = *D_80188884[iVar2]; + + puVar1 = D_80188878; + iVar2 = func_80028D9C(); + puVar3 = D_801888A4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801887A4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801887A4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801887B4; +extern char *D_801887D4; +extern char *D_801887D8; +extern char *D_801887DC; +extern char *D_801887E0; +extern char *D_801887E4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801887B4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801887D4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801887D8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801887DC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801887E0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801887E4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018866E; +extern unsigned short D_80188672; +extern unsigned short D_80188676; +extern unsigned short D_8018867A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018866E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80188672; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80188676; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018867A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80188C04[])(void); + +void func_80141788(void) +{ + D_80188C04[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80188C10[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80188C10[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80188B88; +extern s16 D_80188B8A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80188828; + extern u8 D_80188840; + extern u8 D_801888B4; + extern u8 D_801888BC; + extern void *D_801D82C8; + extern void *D_801D82CC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D82C8 = &D_80188828; + D_801D82CC = &D_801888B4; + } else { + D_801D82C8 = &D_80188840; + D_801D82CC = &D_801888BC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80188B88 = 0xE; + D_80188B8A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80188B8C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80188B8C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80188B8C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80188B64; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80188B64 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80188C34[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80188C34[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80188C44[])(void); + +void func_801425CC(void *a0) { + D_80188C44[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80188C28; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80188C28); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188C58[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188C58[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188C74[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188C74[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188E44[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188E44[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188EFC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188EFC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D7848; +extern u8 D_801D82D0; +extern u8 D_801D82D1; +extern u8 D_801D82D2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D7848; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D82D0 = mul * (local.b[0] >> 4); + D_801D82D1 = mul * (local.b[1] >> 4); + D_801D82D2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80188C4C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188C4C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188C68[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188C68); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80188E34[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80188E34[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188E54[]; +extern unsigned char D_80188EB4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188E54); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80188EB4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D7844; +extern u8 D_801D82D0; +extern u8 D_801D82D4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D7844, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D82D0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D82D0, 0x10); + memcpy(&D_801D82D4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018900C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018900C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80189134[])(void); + +void func_80143B30(void *a0) { + D_80189134[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80189140[])(void); + +void func_80143C38(void *a0) { + D_80189140[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80189148[])(void); + +void func_80143C98(void *a0) { + D_80189148[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80143D28); + + +extern void (*D_80189190[])(void); + +void func_80143E68(void *a0) { + D_80189190[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801891A4[])(void); + +void func_80144054(void *a0) { + D_801891A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801891AC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801891AC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189128; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80189128, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018913C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018913C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018913C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80189150; +extern u8 D_8018915C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189150); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018915C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80189128; +extern u8 D_80189198; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80189128, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80189198, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801891B4[])(void); + +void func_801449C8(void *a0) { + D_801891B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801891BC[])(void); + +void func_80144A2C(void *a0) { + D_801891BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c b/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c index 9a51c93a8..f7189e6dd 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c @@ -1399,1168 +1399,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80182EA4; -extern u8 *D_80182EA8; -extern u8 *D_80182EAC; -extern u8 *D_80182EB0; -extern u8 *D_80182EB4; -extern u16 *D_80182EB8[]; -extern u16 *D_80182EC0[]; -extern u16 *D_80182EE0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80182EA4; - iVar2 = func_80028D58(); - puVar3 = D_80182EB8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80182EA8; - iVar2 = func_80028DE0(); - puVar3 = D_80182EB8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80182EAC + 0x18) = *D_80182EC0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80182EB0 + 0x18) = *D_80182EC0[iVar2]; - - puVar1 = D_80182EB4; - iVar2 = func_80028D9C(); - puVar3 = D_80182EE0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80182DE0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80182DE0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80182DF0; -extern char *D_80182E10; -extern char *D_80182E14; -extern char *D_80182E18; -extern char *D_80182E1C; -extern char *D_80182E20; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80182DF0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80182E10; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E14; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E18; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E1C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E20; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80182CAA; -extern unsigned short D_80182CAE; -extern unsigned short D_80182CB2; -extern unsigned short D_80182CB6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80182CAA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80182CAE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182CB2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182CB6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183240[])(void); - -void func_80141788(void) -{ - D_80183240[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018324C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018324C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; -extern s16 D_801831C4; -extern s16 D_801831C6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182E64; - extern u8 D_80182E7C; - extern u8 D_80182EF0; - extern u8 D_80182EF8; - extern void *D_801E08C0; - extern void *D_801E08C4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E08C0 = &D_80182E64; - D_801E08C4 = &D_80182EF0; - } else { - D_801E08C0 = &D_80182E7C; - D_801E08C4 = &D_80182EF8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801831C4 = 0xE; - D_801831C6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801831C8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u8 D_801831C8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801831C8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801831A0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801831A0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183270[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183270[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80183280[])(void); - -void func_801425CC(void *a0) { - D_80183280[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183264; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183264); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183294[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183294[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801832B0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801832B0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183480[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183480[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183538[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183538[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801DFEEC; -extern u8 D_801E08C8; -extern u8 D_801E08C9; -extern u8 D_801E08CA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801DFEEC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E08C8 = mul * (local.b[0] >> 4); - D_801E08C9 = mul * (local.b[1] >> 4); - D_801E08CA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80183288; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183288); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801832A4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801832A4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183470[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183470[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183490[]; -extern unsigned char D_801834F0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183490); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801834F0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801DFEE8; -extern u8 D_801E08C8; -extern u8 D_801E08CC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801DFEE8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E08C8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E08C8, 0x10); - memcpy(&D_801E08CC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183648[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183648[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183770[])(void); - -void func_80143B30(void *a0) { - D_80183770[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018377C[])(void); - -void func_80143C38(void *a0) { - D_8018377C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183784[])(void); - -void func_80143C98(void *a0) { - D_80183784[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80143D28); - - -extern void (*D_801837CC[])(void); - -void func_80143E68(void *a0) { - D_801837CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801837E0[])(void); - -void func_80144054(void *a0) { - D_801837E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801837E8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801837E8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183764; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183764, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183778; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183778 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183778 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018378C; -extern u8 D_80183798; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018378C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183798); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183764; -extern u8 D_801837D4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183764, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801837D4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801837F0[])(void); - -void func_801449C8(void *a0) { - D_801837F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801837F8[])(void); - -void func_80144A2C(void *a0) { - D_801837F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8013F350", func_80144B14); - - diff --git a/src/ov_SC03_030/ov_SC03_030_jr_80140608.c b/src/ov_SC03_030/ov_SC03_030_jr_80140608.c new file mode 100644 index 000000000..0560a53a3 --- /dev/null +++ b/src/ov_SC03_030/ov_SC03_030_jr_80140608.c @@ -0,0 +1,2248 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801DF55C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801820E4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E077C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E1BD0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801DF55C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80181E20)(); +extern s16 (*D_80181E24)(); +extern M2C_UNK (*D_80181E2C)(); +extern s32 (*D_80181E30)(); +extern s32 D_801E0778; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801DF560; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80182178; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018565C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80182190; +extern M2C_UNK D_80182198; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801821A0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801821BC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801821C8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801821DC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018222C[]; +extern s16 D_8018225C[]; +extern s16 D_801822BC[]; +extern s16 D_801822C4[]; +extern s16 D_801822E4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018231C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182374[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801823BC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801823C4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801823CC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801823D4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018237C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018239C; +extern void func_801321B0(int param_1); +extern int D_801823AC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E07E8; +extern s32 D_801E07EC[]; +extern int D_801E07F0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801823E0; +extern u8 D_801823DC; +extern s16 *D_801823E4; +extern u8 D_801823E8; +extern int D_801E07E8; +extern u16 D_801E07F8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801823E4; /* holds a pointer value (*(u16**)&D_801823E4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801823F8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018244C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_801380E0(s32 arg0); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182450[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80182494; +extern u8 D_801824D8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018251C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182594, D_80182596, D_80182598, D_8018259A, D_8018259C, D_8018259E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E0860; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E0864; +extern s8 D_801E0865; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E0884; +extern s32 D_801E0878; +extern s32 D_801E087C; +extern s32 D_801E0888; +extern void func_8013CABC(void); +extern s32 D_801E0880; +extern void func_8013CAE8(void); +extern s32 D_801E08B0; +extern s32 D_801E08B4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E0890; +extern s32 D_801E0894; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern u8 D_801E1BCA; +extern u8 D_801E1C3E; +extern u8 D_801E1AF2; +extern u8 D_801E1BAC; +extern u8 D_801E1AD0; +extern u8 D_801E1AF1; +extern s32 D_801E1BB0; +extern void func_8013D330(void); +extern void *D_801E0868; +extern void *D_801E086C; +extern void *D_801E0870; +extern s32 D_801E0898; +extern s32 D_801E089C; +extern s32 D_801E08A0; +extern s32 D_801E1B24[]; +extern u8 D_8018268C[]; +extern u8 D_80182734[]; +extern u8 D_801825E4[]; +extern u8 D_801826E0[]; +extern u8 D_80182760[]; +extern u8 D_80182638[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E0874; +extern s32 D_801E08A4; +extern s32 D_801E08A8; +extern s32 D_801E08AC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E088C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801831EC; +extern s32 D_80115188; +extern s16 D_801831C4; +extern s16 D_801831C6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801831C8; +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern u16 D_8011512E; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_80182EE8[]; +extern u8 D_80182F00[]; +extern u16 D_80182E04[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80182EA4; +extern u8 *D_80182EA8; +extern u8 *D_80182EAC; +extern u8 *D_80182EB0; +extern u8 *D_80182EB4; +extern u16 *D_80182EB8[]; +extern u16 *D_80182EC0[]; +extern u16 *D_80182EE0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80182EA4; + iVar2 = func_80028D58(); + puVar3 = D_80182EB8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80182EA8; + iVar2 = func_80028DE0(); + puVar3 = D_80182EB8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80182EAC + 0x18) = *D_80182EC0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80182EB0 + 0x18) = *D_80182EC0[iVar2]; + + puVar1 = D_80182EB4; + iVar2 = func_80028D9C(); + puVar3 = D_80182EE0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80182DE0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80182DE0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80182DF0; +extern char *D_80182E10; +extern char *D_80182E14; +extern char *D_80182E18; +extern char *D_80182E1C; +extern char *D_80182E20; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80182DF0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80182E10; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E14; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E18; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E1C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E20; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80182CAA; +extern unsigned short D_80182CAE; +extern unsigned short D_80182CB2; +extern unsigned short D_80182CB6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80182CAA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80182CAE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182CB2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182CB6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183240[])(void); + +void func_80141788(void) +{ + D_80183240[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018324C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018324C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; +extern s16 D_801831C4; +extern s16 D_801831C6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182E64; + extern u8 D_80182E7C; + extern u8 D_80182EF0; + extern u8 D_80182EF8; + extern void *D_801E08C0; + extern void *D_801E08C4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E08C0 = &D_80182E64; + D_801E08C4 = &D_80182EF0; + } else { + D_801E08C0 = &D_80182E7C; + D_801E08C4 = &D_80182EF8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801831C4 = 0xE; + D_801831C6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801831C8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u8 D_801831C8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801831C8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801831A0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801831A0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183270[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183270[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80183280[])(void); + +void func_801425CC(void *a0) { + D_80183280[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183264; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183264); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183294[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183294[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801832B0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801832B0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183480[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183480[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183538[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183538[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801DFEEC; +extern u8 D_801E08C8; +extern u8 D_801E08C9; +extern u8 D_801E08CA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801DFEEC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E08C8 = mul * (local.b[0] >> 4); + D_801E08C9 = mul * (local.b[1] >> 4); + D_801E08CA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80183288; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183288); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801832A4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801832A4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183470[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183470[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183490[]; +extern unsigned char D_801834F0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183490); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801834F0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801DFEE8; +extern u8 D_801E08C8; +extern u8 D_801E08CC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801DFEE8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E08C8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E08C8, 0x10); + memcpy(&D_801E08CC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183648[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183648[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183770[])(void); + +void func_80143B30(void *a0) { + D_80183770[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018377C[])(void); + +void func_80143C38(void *a0) { + D_8018377C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183784[])(void); + +void func_80143C98(void *a0) { + D_80183784[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80143D28); + + +extern void (*D_801837CC[])(void); + +void func_80143E68(void *a0) { + D_801837CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801837E0[])(void); + +void func_80144054(void *a0) { + D_801837E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801837E8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801837E8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183764; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183764, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183778; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183778 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183778 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018378C; +extern u8 D_80183798; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018378C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183798); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183764; +extern u8 D_801837D4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183764, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801837D4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801837F0[])(void); + +void func_801449C8(void *a0) { + D_801837F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801837F8[])(void); + +void func_80144A2C(void *a0) { + D_801837F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80140608", func_80144B14); + + + diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c b/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c index f4f3209a3..46e1bc3a1 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801833C0; -extern u8 *D_801833C4; -extern u8 *D_801833C8; -extern u8 *D_801833CC; -extern u8 *D_801833D0; -extern u16 *D_801833D4[]; -extern u16 *D_801833DC[]; -extern u16 *D_801833FC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801833C0; - iVar2 = func_80028D58(); - puVar3 = D_801833D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801833C4; - iVar2 = func_80028DE0(); - puVar3 = D_801833D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801833C8 + 0x18) = *D_801833DC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801833CC + 0x18) = *D_801833DC[iVar2]; - - puVar1 = D_801833D0; - iVar2 = func_80028D9C(); - puVar3 = D_801833FC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801832FC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801832FC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018330C; -extern char *D_8018332C; -extern char *D_80183330; -extern char *D_80183334; -extern char *D_80183338; -extern char *D_8018333C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018330C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018332C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183330; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183334; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183338; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018333C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801831C6; -extern unsigned short D_801831CA; -extern unsigned short D_801831CE; -extern unsigned short D_801831D2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801831C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801831CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801831CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801831D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018375C[])(void); - -void func_80141788(void) -{ - D_8018375C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183768[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183768[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801836E0; -extern s16 D_801836E2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80183380; - extern u8 D_80183398; - extern u8 D_8018340C; - extern u8 D_80183414; - extern void *D_801C4CC0; - extern void *D_801C4CC4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C4CC0 = &D_80183380; - D_801C4CC4 = &D_8018340C; - } else { - D_801C4CC0 = &D_80183398; - D_801C4CC4 = &D_80183414; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801836E0 = 0xE; - D_801836E2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801836E4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801836E4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801836E4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801836BC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801836BC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018378C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018378C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018379C[])(void); - -void func_801425CC(void *a0) { - D_8018379C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183780; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183780); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801837B0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801837B0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801837CC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801837CC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018399C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018399C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183A54[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183A54[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C4390; -extern u8 D_801C4CC8; -extern u8 D_801C4CC9; -extern u8 D_801C4CCA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C4390; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C4CC8 = mul * (local.b[0] >> 4); - D_801C4CC9 = mul * (local.b[1] >> 4); - D_801C4CCA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801837A4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801837A4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801837C0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801837C0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018398C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018398C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801839AC[]; -extern unsigned char D_80183A0C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801839AC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183A0C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C438C; -extern u8 D_801C4CC8; -extern u8 D_801C4CCC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C438C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C4CC8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C4CC8, 0x10); - memcpy(&D_801C4CCC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183B64[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183B64[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183C8C[])(void); - -void func_80143B30(void *a0) { - D_80183C8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183C98[])(void); - -void func_80143C38(void *a0) { - D_80183C98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183CA0[])(void); - -void func_80143C98(void *a0) { - D_80183CA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183CE8[])(void); - -void func_80143E68(void *a0) { - D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183CFC[])(void); - -void func_80144054(void *a0) { - D_80183CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183D04[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183D04[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183C80; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183C80, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183C94; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183C94 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183C94 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183CA8; -extern u8 D_80183CB4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183CA8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183CB4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183C80; -extern u8 D_80183CF0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183C80, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183CF0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183D0C[])(void); - -void func_801449C8(void *a0) { - D_80183D0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183D14[])(void); - -void func_80144A2C(void *a0) { - D_80183D14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_031/ov_SC03_031_jr_80140608.c b/src/ov_SC03_031/ov_SC03_031_jr_80140608.c new file mode 100644 index 000000000..3ed9c7e75 --- /dev/null +++ b/src/ov_SC03_031/ov_SC03_031_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C3A00; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182600[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C4B7C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C6238; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C3A00; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018233C)(); +extern s16 (*D_80182340)(); +extern M2C_UNK (*D_80182348)(); +extern s32 (*D_8018234C)(); +extern s32 D_801C4B78; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C3A04; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80182694; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185B78; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801826AC; +extern M2C_UNK D_801826B4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801826BC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801826D8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801826E4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801826F8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182748[]; +extern s16 D_80182778[]; +extern s16 D_801827D8[]; +extern s16 D_801827E0[]; +extern s16 D_80182800[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182838[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182890[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801828D8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801828E0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801828E8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801828F0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182898; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801828B8; +extern void func_801321B0(int param_1); +extern int D_801828C8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C4BE8; +extern s32 D_801C4BEC[]; +extern int D_801C4BF0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801828FC; +extern u8 D_801828F8; +extern s16 *D_80182900; +extern u8 D_80182904; +extern int D_801C4BE8; +extern u16 D_801C4BF8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182900; /* holds a pointer value (*(u16**)&D_80182900) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182914[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182968; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018296C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801829B0; +extern u8 D_801829F4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182A38[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182AB0, D_80182AB2, D_80182AB4, D_80182AB6, D_80182AB8, D_80182ABA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C4C60; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C4C64; +extern s8 D_801C4C65; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C4C84; +extern s32 D_801C4C78; +extern s32 D_801C4C7C; +extern s32 D_801C4C88; +extern void func_8013CABC(void); +extern s32 D_801C4C80; +extern void func_8013CAE8(void); +extern s32 D_801C4CB0; +extern s32 D_801C4CB4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C4C90; +extern s32 D_801C4C94; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C6232; +extern u8 D_801C62A6; +extern u8 D_801C615A; +extern u8 D_801C6214; +extern u8 D_801C6138; +extern u8 D_801C6159; +extern s32 D_801C6218; +extern void func_8013D330(void); +extern void *D_801C4C68; +extern void *D_801C4C6C; +extern void *D_801C4C70; +extern s32 D_801C4C98; +extern s32 D_801C4C9C; +extern s32 D_801C4CA0; +extern s32 D_801C618C[]; +extern u8 D_80182BA8[]; +extern u8 D_80182C50[]; +extern u8 D_80182B00[]; +extern u8 D_80182BFC[]; +extern u8 D_80182C7C[]; +extern u8 D_80182B54[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C4C74; +extern s32 D_801C4CA4; +extern s32 D_801C4CA8; +extern s32 D_801C4CAC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C4C8C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183708; +extern s32 D_80115188; +extern s16 D_801836E0; +extern s16 D_801836E2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801836E4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801833C0; +extern u8 *D_801833C4; +extern u8 *D_801833C8; +extern u8 *D_801833CC; +extern u8 *D_801833D0; +extern u16 *D_801833D4[]; +extern u16 *D_801833DC[]; +extern u16 *D_801833FC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801833C0; + iVar2 = func_80028D58(); + puVar3 = D_801833D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801833C4; + iVar2 = func_80028DE0(); + puVar3 = D_801833D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801833C8 + 0x18) = *D_801833DC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801833CC + 0x18) = *D_801833DC[iVar2]; + + puVar1 = D_801833D0; + iVar2 = func_80028D9C(); + puVar3 = D_801833FC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801832FC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801832FC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018330C; +extern char *D_8018332C; +extern char *D_80183330; +extern char *D_80183334; +extern char *D_80183338; +extern char *D_8018333C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018330C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018332C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183330; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183334; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183338; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018333C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801831C6; +extern unsigned short D_801831CA; +extern unsigned short D_801831CE; +extern unsigned short D_801831D2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801831C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801831CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801831CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801831D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018375C[])(void); + +void func_80141788(void) +{ + D_8018375C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183768[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183768[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801836E0; +extern s16 D_801836E2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80183380; + extern u8 D_80183398; + extern u8 D_8018340C; + extern u8 D_80183414; + extern void *D_801C4CC0; + extern void *D_801C4CC4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C4CC0 = &D_80183380; + D_801C4CC4 = &D_8018340C; + } else { + D_801C4CC0 = &D_80183398; + D_801C4CC4 = &D_80183414; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801836E0 = 0xE; + D_801836E2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801836E4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801836E4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801836E4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801836BC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801836BC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018378C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018378C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018379C[])(void); + +void func_801425CC(void *a0) { + D_8018379C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183780; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183780); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801837B0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801837B0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801837CC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801837CC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018399C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018399C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183A54[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183A54[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C4390; +extern u8 D_801C4CC8; +extern u8 D_801C4CC9; +extern u8 D_801C4CCA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C4390; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C4CC8 = mul * (local.b[0] >> 4); + D_801C4CC9 = mul * (local.b[1] >> 4); + D_801C4CCA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801837A4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801837A4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801837C0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801837C0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018398C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018398C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801839AC[]; +extern unsigned char D_80183A0C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801839AC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183A0C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C438C; +extern u8 D_801C4CC8; +extern u8 D_801C4CCC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C438C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C4CC8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C4CC8, 0x10); + memcpy(&D_801C4CCC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183B64[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183B64[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183C8C[])(void); + +void func_80143B30(void *a0) { + D_80183C8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183C98[])(void); + +void func_80143C38(void *a0) { + D_80183C98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183CA0[])(void); + +void func_80143C98(void *a0) { + D_80183CA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80143D28); + + +extern void (*D_80183CE8[])(void); + +void func_80143E68(void *a0) { + D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183CFC[])(void); + +void func_80144054(void *a0) { + D_80183CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183D04[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183D04[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183C80; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183C80, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183C94; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183C94 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183C94 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183CA8; +extern u8 D_80183CB4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183CA8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183CB4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183C80; +extern u8 D_80183CF0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183C80, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183CF0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183D0C[])(void); + +void func_801449C8(void *a0) { + D_80183D0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183D14[])(void); + +void func_80144A2C(void *a0) { + D_80183D14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c b/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c index f28848274..8b5566fc9 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018A6BC; -extern u8 *D_8018A6C0; -extern u8 *D_8018A6C4; -extern u8 *D_8018A6C8; -extern u8 *D_8018A6CC; -extern u16 *D_8018A6D0[]; -extern u16 *D_8018A6D8[]; -extern u16 *D_8018A6F8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018A6BC; - iVar2 = func_80028D58(); - puVar3 = D_8018A6D0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018A6C0; - iVar2 = func_80028DE0(); - puVar3 = D_8018A6D0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018A6C4 + 0x18) = *D_8018A6D8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018A6C8 + 0x18) = *D_8018A6D8[iVar2]; - - puVar1 = D_8018A6CC; - iVar2 = func_80028D9C(); - puVar3 = D_8018A6F8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018A5F8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018A5F8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018A608; -extern char *D_8018A628; -extern char *D_8018A62C; -extern char *D_8018A630; -extern char *D_8018A634; -extern char *D_8018A638; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018A608); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018A628; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A62C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A630; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A634; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A638; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018A4C2; -extern unsigned short D_8018A4C6; -extern unsigned short D_8018A4CA; -extern unsigned short D_8018A4CE; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018A4C2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A4C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A4CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A4CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018AA58[])(void); - -void func_80141788(void) -{ - D_8018AA58[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018AA64[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018AA64[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018A9DC; -extern s16 D_8018A9DE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018A67C; - extern u8 D_8018A694; - extern u8 D_8018A708; - extern u8 D_8018A710; - extern void *D_801C5578; - extern void *D_801C557C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C5578 = &D_8018A67C; - D_801C557C = &D_8018A708; - } else { - D_801C5578 = &D_8018A694; - D_801C557C = &D_8018A710; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018A9DC = 0xE; - D_8018A9DE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018A9E0: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018A9E0; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018A9E0); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018A9B8; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018A9B8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018AA88[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018AA88[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018AA98[])(void); - -void func_801425CC(void *a0) { - D_8018AA98[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018AA7C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018AA7C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018AAAC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018AAAC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018AAC8[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018AAC8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018AC98[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018AC98[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018AD50[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018AD50[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C4BFC; -extern u8 D_801C5580; -extern u8 D_801C5581; -extern u8 D_801C5582; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C4BFC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C5580 = mul * (local.b[0] >> 4); - D_801C5581 = mul * (local.b[1] >> 4); - D_801C5582 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018AAA0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018AAA0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018AABC[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018AABC); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018AC88[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018AC88[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018ACA8[]; -extern unsigned char D_8018AD08[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018ACA8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018AD08); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C4BF8; -extern u8 D_801C5580; -extern u8 D_801C5584; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C4BF8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C5580); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C5580, 0x10); - memcpy(&D_801C5584, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018AE60[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018AE60[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018AF88[])(void); - -void func_80143B30(void *a0) { - D_8018AF88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018AF94[])(void); - -void func_80143C38(void *a0) { - D_8018AF94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018AF9C[])(void); - -void func_80143C98(void *a0) { - D_8018AF9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018AFE4[])(void); - -void func_80143E68(void *a0) { - D_8018AFE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018AFF8[])(void); - -void func_80144054(void *a0) { - D_8018AFF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018B000[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018B000[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018AF7C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018AF7C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018AF90; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018AF90 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018AF90 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018AFA4; -extern u8 D_8018AFB0; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018AFA4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018AFB0); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018AF7C; -extern u8 D_8018AFEC; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018AF7C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018AFEC, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018B008[])(void); - -void func_801449C8(void *a0) { - D_8018B008[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018B010[])(void); - -void func_80144A2C(void *a0) { - D_8018B010[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_089/ov_SC03_089_jr_80140608.c b/src/ov_SC03_089/ov_SC03_089_jr_80140608.c new file mode 100644 index 000000000..69e89a903 --- /dev/null +++ b/src/ov_SC03_089/ov_SC03_089_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C426C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801898FC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C5434; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C68B0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C426C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80189638)(); +extern s16 (*D_8018963C)(); +extern M2C_UNK (*D_80189644)(); +extern s32 (*D_80189648)(); +extern s32 D_801C5430; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C4270; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80189990; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018CE74; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801899A8; +extern M2C_UNK D_801899B0; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801899B8; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801899D4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801899E0[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801899F4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80189A44[]; +extern s16 D_80189A74[]; +extern s16 D_80189AD4[]; +extern s16 D_80189ADC[]; +extern s16 D_80189AFC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80189B34[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80189B8C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80189BD4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80189BDC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80189BE4[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80189BEC[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80189B94; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80189BB4; +extern void func_801321B0(int param_1); +extern int D_80189BC4; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C54A0; +extern s32 D_801C54A4[]; +extern int D_801C54A8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80189BF8; +extern u8 D_80189BF4; +extern s16 *D_80189BFC; +extern u8 D_80189C00; +extern int D_801C54A0; +extern u16 D_801C54B0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80189BFC; /* holds a pointer value (*(u16**)&D_80189BFC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80189C10[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80189C64; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80189C68[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80189CAC; +extern u8 D_80189CF0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80189D34[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80189DAC, D_80189DAE, D_80189DB0, D_80189DB2, D_80189DB4, D_80189DB6; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C5518; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C551C; +extern s8 D_801C551D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C553C; +extern s32 D_801C5530; +extern s32 D_801C5534; +extern s32 D_801C5540; +extern void func_8013CABC(void); +extern s32 D_801C5538; +extern void func_8013CAE8(void); +extern s32 D_801C5568; +extern s32 D_801C556C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C5548; +extern s32 D_801C554C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C68AA; +extern u8 D_801C691E; +extern u8 D_801C67D2; +extern u8 D_801C688C; +extern u8 D_801C67B0; +extern u8 D_801C67D1; +extern s32 D_801C6890; +extern void func_8013D330(void); +extern void *D_801C5520; +extern void *D_801C5524; +extern void *D_801C5528; +extern s32 D_801C5550; +extern s32 D_801C5554; +extern s32 D_801C5558; +extern s32 D_801C6804[]; +extern u8 D_80189EA4[]; +extern u8 D_80189F4C[]; +extern u8 D_80189DFC[]; +extern u8 D_80189EF8[]; +extern u8 D_80189F78[]; +extern u8 D_80189E50[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C552C; +extern s32 D_801C555C; +extern s32 D_801C5560; +extern s32 D_801C5564; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C5544; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018AA04; +extern s32 D_80115188; +extern s16 D_8018A9DC; +extern s16 D_8018A9DE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018A9E0; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018A6BC; +extern u8 *D_8018A6C0; +extern u8 *D_8018A6C4; +extern u8 *D_8018A6C8; +extern u8 *D_8018A6CC; +extern u16 *D_8018A6D0[]; +extern u16 *D_8018A6D8[]; +extern u16 *D_8018A6F8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018A6BC; + iVar2 = func_80028D58(); + puVar3 = D_8018A6D0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018A6C0; + iVar2 = func_80028DE0(); + puVar3 = D_8018A6D0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018A6C4 + 0x18) = *D_8018A6D8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018A6C8 + 0x18) = *D_8018A6D8[iVar2]; + + puVar1 = D_8018A6CC; + iVar2 = func_80028D9C(); + puVar3 = D_8018A6F8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018A5F8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018A5F8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018A608; +extern char *D_8018A628; +extern char *D_8018A62C; +extern char *D_8018A630; +extern char *D_8018A634; +extern char *D_8018A638; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018A608); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018A628; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A62C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A630; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A634; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A638; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018A4C2; +extern unsigned short D_8018A4C6; +extern unsigned short D_8018A4CA; +extern unsigned short D_8018A4CE; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018A4C2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A4C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A4CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A4CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018AA58[])(void); + +void func_80141788(void) +{ + D_8018AA58[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018AA64[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018AA64[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018A9DC; +extern s16 D_8018A9DE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018A67C; + extern u8 D_8018A694; + extern u8 D_8018A708; + extern u8 D_8018A710; + extern void *D_801C5578; + extern void *D_801C557C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C5578 = &D_8018A67C; + D_801C557C = &D_8018A708; + } else { + D_801C5578 = &D_8018A694; + D_801C557C = &D_8018A710; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018A9DC = 0xE; + D_8018A9DE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018A9E0: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018A9E0; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018A9E0); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018A9B8; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018A9B8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018AA88[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018AA88[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018AA98[])(void); + +void func_801425CC(void *a0) { + D_8018AA98[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018AA7C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018AA7C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018AAAC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018AAAC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018AAC8[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018AAC8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018AC98[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018AC98[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018AD50[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018AD50[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C4BFC; +extern u8 D_801C5580; +extern u8 D_801C5581; +extern u8 D_801C5582; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C4BFC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C5580 = mul * (local.b[0] >> 4); + D_801C5581 = mul * (local.b[1] >> 4); + D_801C5582 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018AAA0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018AAA0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018AABC[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018AABC); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018AC88[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018AC88[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018ACA8[]; +extern unsigned char D_8018AD08[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018ACA8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018AD08); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C4BF8; +extern u8 D_801C5580; +extern u8 D_801C5584; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C4BF8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C5580); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C5580, 0x10); + memcpy(&D_801C5584, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018AE60[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018AE60[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018AF88[])(void); + +void func_80143B30(void *a0) { + D_8018AF88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018AF94[])(void); + +void func_80143C38(void *a0) { + D_8018AF94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018AF9C[])(void); + +void func_80143C98(void *a0) { + D_8018AF9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80143D28); + + +extern void (*D_8018AFE4[])(void); + +void func_80143E68(void *a0) { + D_8018AFE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018AFF8[])(void); + +void func_80144054(void *a0) { + D_8018AFF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018B000[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018B000[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018AF7C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018AF7C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018AF90; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018AF90 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018AF90 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018AFA4; +extern u8 D_8018AFB0; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018AFA4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018AFB0); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018AF7C; +extern u8 D_8018AFEC; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018AF7C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018AFEC, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018B008[])(void); + +void func_801449C8(void *a0) { + D_8018B008[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018B010[])(void); + +void func_80144A2C(void *a0) { + D_8018B010[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c b/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c index 678428ac0..29a777a19 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018CAE0; -extern u8 *D_8018CAE4; -extern u8 *D_8018CAE8; -extern u8 *D_8018CAEC; -extern u8 *D_8018CAF0; -extern u16 *D_8018CAF4[]; -extern u16 *D_8018CAFC[]; -extern u16 *D_8018CB1C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018CAE0; - iVar2 = func_80028D58(); - puVar3 = D_8018CAF4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018CAE4; - iVar2 = func_80028DE0(); - puVar3 = D_8018CAF4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018CAE8 + 0x18) = *D_8018CAFC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018CAEC + 0x18) = *D_8018CAFC[iVar2]; - - puVar1 = D_8018CAF0; - iVar2 = func_80028D9C(); - puVar3 = D_8018CB1C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018CA1C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018CA1C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018CA2C; -extern char *D_8018CA4C; -extern char *D_8018CA50; -extern char *D_8018CA54; -extern char *D_8018CA58; -extern char *D_8018CA5C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018CA2C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018CA4C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018CA50; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018CA54; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018CA58; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018CA5C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018C8E6; -extern unsigned short D_8018C8EA; -extern unsigned short D_8018C8EE; -extern unsigned short D_8018C8F2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018C8E6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C8EA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C8EE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018C8F2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018CE7C[])(void); - -void func_80141788(void) -{ - D_8018CE7C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018CE88[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018CE88[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018CE00; -extern s16 D_8018CE02; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018CAA0; - extern u8 D_8018CAB8; - extern u8 D_8018CB2C; - extern u8 D_8018CB34; - extern void *D_801CA9E0; - extern void *D_801CA9E4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CA9E0 = &D_8018CAA0; - D_801CA9E4 = &D_8018CB2C; - } else { - D_801CA9E0 = &D_8018CAB8; - D_801CA9E4 = &D_8018CB34; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018CE00 = 0xE; - D_8018CE02 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018CE04: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018CE04; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018CE04); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018CDDC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018CDDC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018CEAC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018CEAC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018CEBC[])(void); - -void func_801425CC(void *a0) { - D_8018CEBC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018CEA0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018CEA0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CED0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CED0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018CEEC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018CEEC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018D0BC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018D0BC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018D174[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018D174[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CA068; -extern u8 D_801CA9E8; -extern u8 D_801CA9E9; -extern u8 D_801CA9EA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CA068; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CA9E8 = mul * (local.b[0] >> 4); - D_801CA9E9 = mul * (local.b[1] >> 4); - D_801CA9EA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018CEC4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018CEC4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018CEE0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018CEE0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018D0AC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018D0AC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018D0CC[]; -extern unsigned char D_8018D12C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018D0CC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018D12C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CA064; -extern u8 D_801CA9E8; -extern u8 D_801CA9EC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CA064, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CA9E8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CA9E8, 0x10); - memcpy(&D_801CA9EC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018D284[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018D284[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018D3AC[])(void); - -void func_80143B30(void *a0) { - D_8018D3AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018D3B8[])(void); - -void func_80143C38(void *a0) { - D_8018D3B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018D3C0[])(void); - -void func_80143C98(void *a0) { - D_8018D3C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018D408[])(void); - -void func_80143E68(void *a0) { - D_8018D408[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018D41C[])(void); - -void func_80144054(void *a0) { - D_8018D41C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018D424[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018D424[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018D3A0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018D3A0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018D3B4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018D3B4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018D3B4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018D3C8; -extern u8 D_8018D3D4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018D3C8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018D3D4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018D3A0; -extern u8 D_8018D410; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018D3A0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018D410, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018D42C[])(void); - -void func_801449C8(void *a0) { - D_8018D42C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018D434[])(void); - -void func_80144A2C(void *a0) { - D_8018D434[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_090/ov_SC03_090_jr_80140608.c b/src/ov_SC03_090/ov_SC03_090_jr_80140608.c new file mode 100644 index 000000000..5880e8930 --- /dev/null +++ b/src/ov_SC03_090/ov_SC03_090_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C96D8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018BD20[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CA89C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801CBD20; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C96D8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018BA5C)(); +extern s16 (*D_8018BA60)(); +extern M2C_UNK (*D_8018BA68)(); +extern s32 (*D_8018BA6C)(); +extern s32 D_801CA898; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C96DC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018BDB4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018F298; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018BDCC; +extern M2C_UNK D_8018BDD4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018BDDC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018BDF8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018BE04[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018BE18[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018BE68[]; +extern s16 D_8018BE98[]; +extern s16 D_8018BEF8[]; +extern s16 D_8018BF00[]; +extern s16 D_8018BF20[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018BF58[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018BFB0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018BFF8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018C000[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018C008[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018C010[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018BFB8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018BFD8; +extern void func_801321B0(int param_1); +extern int D_8018BFE8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CA908; +extern s32 D_801CA90C[]; +extern int D_801CA910; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018C01C; +extern u8 D_8018C018; +extern s16 *D_8018C020; +extern u8 D_8018C024; +extern int D_801CA908; +extern u16 D_801CA918; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018C020; /* holds a pointer value (*(u16**)&D_8018C020) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018C034[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018C088; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018C08C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018C0D0; +extern u8 D_8018C114; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018C158[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018C1D0, D_8018C1D2, D_8018C1D4, D_8018C1D6, D_8018C1D8, D_8018C1DA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CA980; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CA984; +extern s8 D_801CA985; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CA9A4; +extern s32 D_801CA998; +extern s32 D_801CA99C; +extern s32 D_801CA9A8; +extern void func_8013CABC(void); +extern s32 D_801CA9A0; +extern void func_8013CAE8(void); +extern s32 D_801CA9D0; +extern s32 D_801CA9D4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CA9B0; +extern s32 D_801CA9B4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801CBD1A; +extern u8 D_801CBD8E; +extern u8 D_801CBC42; +extern u8 D_801CBCFC; +extern u8 D_801CBC20; +extern u8 D_801CBC41; +extern s32 D_801CBD00; +extern void func_8013D330(void); +extern void *D_801CA988; +extern void *D_801CA98C; +extern void *D_801CA990; +extern s32 D_801CA9B8; +extern s32 D_801CA9BC; +extern s32 D_801CA9C0; +extern s32 D_801CBC74[]; +extern u8 D_8018C2C8[]; +extern u8 D_8018C370[]; +extern u8 D_8018C220[]; +extern u8 D_8018C31C[]; +extern u8 D_8018C39C[]; +extern u8 D_8018C274[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CA994; +extern s32 D_801CA9C4; +extern s32 D_801CA9C8; +extern s32 D_801CA9CC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CA9AC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018CE28; +extern s32 D_80115188; +extern s16 D_8018CE00; +extern s16 D_8018CE02; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018CE04; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018CAE0; +extern u8 *D_8018CAE4; +extern u8 *D_8018CAE8; +extern u8 *D_8018CAEC; +extern u8 *D_8018CAF0; +extern u16 *D_8018CAF4[]; +extern u16 *D_8018CAFC[]; +extern u16 *D_8018CB1C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018CAE0; + iVar2 = func_80028D58(); + puVar3 = D_8018CAF4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018CAE4; + iVar2 = func_80028DE0(); + puVar3 = D_8018CAF4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018CAE8 + 0x18) = *D_8018CAFC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018CAEC + 0x18) = *D_8018CAFC[iVar2]; + + puVar1 = D_8018CAF0; + iVar2 = func_80028D9C(); + puVar3 = D_8018CB1C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018CA1C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018CA1C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018CA2C; +extern char *D_8018CA4C; +extern char *D_8018CA50; +extern char *D_8018CA54; +extern char *D_8018CA58; +extern char *D_8018CA5C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018CA2C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018CA4C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018CA50; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018CA54; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018CA58; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018CA5C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018C8E6; +extern unsigned short D_8018C8EA; +extern unsigned short D_8018C8EE; +extern unsigned short D_8018C8F2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018C8E6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C8EA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C8EE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018C8F2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018CE7C[])(void); + +void func_80141788(void) +{ + D_8018CE7C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018CE88[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018CE88[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018CE00; +extern s16 D_8018CE02; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018CAA0; + extern u8 D_8018CAB8; + extern u8 D_8018CB2C; + extern u8 D_8018CB34; + extern void *D_801CA9E0; + extern void *D_801CA9E4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CA9E0 = &D_8018CAA0; + D_801CA9E4 = &D_8018CB2C; + } else { + D_801CA9E0 = &D_8018CAB8; + D_801CA9E4 = &D_8018CB34; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018CE00 = 0xE; + D_8018CE02 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018CE04: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018CE04; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018CE04); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018CDDC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018CDDC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018CEAC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018CEAC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018CEBC[])(void); + +void func_801425CC(void *a0) { + D_8018CEBC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018CEA0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018CEA0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CED0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CED0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018CEEC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018CEEC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018D0BC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018D0BC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018D174[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018D174[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CA068; +extern u8 D_801CA9E8; +extern u8 D_801CA9E9; +extern u8 D_801CA9EA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CA068; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CA9E8 = mul * (local.b[0] >> 4); + D_801CA9E9 = mul * (local.b[1] >> 4); + D_801CA9EA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018CEC4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018CEC4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018CEE0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018CEE0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018D0AC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018D0AC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018D0CC[]; +extern unsigned char D_8018D12C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018D0CC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018D12C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CA064; +extern u8 D_801CA9E8; +extern u8 D_801CA9EC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CA064, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CA9E8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CA9E8, 0x10); + memcpy(&D_801CA9EC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018D284[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018D284[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018D3AC[])(void); + +void func_80143B30(void *a0) { + D_8018D3AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018D3B8[])(void); + +void func_80143C38(void *a0) { + D_8018D3B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018D3C0[])(void); + +void func_80143C98(void *a0) { + D_8018D3C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80143D28); + + +extern void (*D_8018D408[])(void); + +void func_80143E68(void *a0) { + D_8018D408[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018D41C[])(void); + +void func_80144054(void *a0) { + D_8018D41C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018D424[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018D424[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018D3A0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018D3A0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018D3B4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018D3B4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018D3B4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018D3C8; +extern u8 D_8018D3D4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018D3C8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018D3D4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018D3A0; +extern u8 D_8018D410; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018D3A0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018D410, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018D42C[])(void); + +void func_801449C8(void *a0) { + D_8018D42C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018D434[])(void); + +void func_80144A2C(void *a0) { + D_8018D434[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c b/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c index 62ac1a34a..752cad44b 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018D988; -extern u8 *D_8018D98C; -extern u8 *D_8018D990; -extern u8 *D_8018D994; -extern u8 *D_8018D998; -extern u16 *D_8018D99C[]; -extern u16 *D_8018D9A4[]; -extern u16 *D_8018D9C4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018D988; - iVar2 = func_80028D58(); - puVar3 = D_8018D99C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018D98C; - iVar2 = func_80028DE0(); - puVar3 = D_8018D99C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018D990 + 0x18) = *D_8018D9A4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018D994 + 0x18) = *D_8018D9A4[iVar2]; - - puVar1 = D_8018D998; - iVar2 = func_80028D9C(); - puVar3 = D_8018D9C4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018D8C4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018D8C4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018D8D4; -extern char *D_8018D8F4; -extern char *D_8018D8F8; -extern char *D_8018D8FC; -extern char *D_8018D900; -extern char *D_8018D904; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018D8D4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018D8F4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D8F8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D8FC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D900; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D904; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018D78E; -extern unsigned short D_8018D792; -extern unsigned short D_8018D796; -extern unsigned short D_8018D79A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018D78E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D792; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D796; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D79A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018DD24[])(void); - -void func_80141788(void) -{ - D_8018DD24[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018DD30[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018DD30[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018DCA8; -extern s16 D_8018DCAA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018D948; - extern u8 D_8018D960; - extern u8 D_8018D9D4; - extern u8 D_8018D9DC; - extern void *D_801D10B0; - extern void *D_801D10B4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D10B0 = &D_8018D948; - D_801D10B4 = &D_8018D9D4; - } else { - D_801D10B0 = &D_8018D960; - D_801D10B4 = &D_8018D9DC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018DCA8 = 0xE; - D_8018DCAA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018DCAC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018DCAC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018DCAC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018DC84; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018DC84 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018DD54[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018DD54[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018DD64[])(void); - -void func_801425CC(void *a0) { - D_8018DD64[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018DD48; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018DD48); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DD78[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DD78[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DD94[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DD94[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DF64[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DF64[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E01C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E01C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D0734; -extern u8 D_801D10B8; -extern u8 D_801D10B9; -extern u8 D_801D10BA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D0734; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D10B8 = mul * (local.b[0] >> 4); - D_801D10B9 = mul * (local.b[1] >> 4); - D_801D10BA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018DD6C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018DD6C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018DD88[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018DD88); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018DF54[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018DF54[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018DF74[]; -extern unsigned char D_8018DFD4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018DF74); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018DFD4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D0730; -extern u8 D_801D10B8; -extern u8 D_801D10BC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D0730, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D10B8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D10B8, 0x10); - memcpy(&D_801D10BC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018E12C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018E12C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018E254[])(void); - -void func_80143B30(void *a0) { - D_8018E254[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018E260[])(void); - -void func_80143C38(void *a0) { - D_8018E260[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018E268[])(void); - -void func_80143C98(void *a0) { - D_8018E268[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018E2B0[])(void); - -void func_80143E68(void *a0) { - D_8018E2B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018E2C4[])(void); - -void func_80144054(void *a0) { - D_8018E2C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018E2CC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018E2CC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018E248; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018E248, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018E25C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018E25C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018E25C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018E270; -extern u8 D_8018E27C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018E270); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018E27C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018E248; -extern u8 D_8018E2B8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018E248, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018E2B8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018E2D4[])(void); - -void func_801449C8(void *a0) { - D_8018E2D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018E2DC[])(void); - -void func_80144A2C(void *a0) { - D_8018E2DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_091/ov_SC03_091_jr_80140608.c b/src/ov_SC03_091/ov_SC03_091_jr_80140608.c new file mode 100644 index 000000000..b3e6732e6 --- /dev/null +++ b/src/ov_SC03_091/ov_SC03_091_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CFDA4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018CBC8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D0F6C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D2670; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CFDA4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018C904)(); +extern s16 (*D_8018C908)(); +extern M2C_UNK (*D_8018C910)(); +extern s32 (*D_8018C914)(); +extern s32 D_801D0F68; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CFDA8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018CC5C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80190140; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018CC74; +extern M2C_UNK D_8018CC7C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018CC84; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018CCA0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018CCAC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018CCC0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018CD10[]; +extern s16 D_8018CD40[]; +extern s16 D_8018CDA0[]; +extern s16 D_8018CDA8[]; +extern s16 D_8018CDC8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018CE00[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018CE58[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018CEA0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018CEA8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018CEB0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018CEB8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018CE60; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018CE80; +extern void func_801321B0(int param_1); +extern int D_8018CE90; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D0FD8; +extern s32 D_801D0FDC[]; +extern int D_801D0FE0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018CEC4; +extern u8 D_8018CEC0; +extern s16 *D_8018CEC8; +extern u8 D_8018CECC; +extern int D_801D0FD8; +extern u16 D_801D0FE8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018CEC8; /* holds a pointer value (*(u16**)&D_8018CEC8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018CEDC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018CF30; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018CF34[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018CF78; +extern u8 D_8018CFBC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018D000[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018D078, D_8018D07A, D_8018D07C, D_8018D07E, D_8018D080, D_8018D082; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D1050; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D1054; +extern s8 D_801D1055; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D1074; +extern s32 D_801D1068; +extern s32 D_801D106C; +extern s32 D_801D1078; +extern void func_8013CABC(void); +extern s32 D_801D1070; +extern void func_8013CAE8(void); +extern s32 D_801D10A0; +extern s32 D_801D10A4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D1080; +extern s32 D_801D1084; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D266A; +extern u8 D_801D26DE; +extern u8 D_801D2592; +extern u8 D_801D264C; +extern u8 D_801D2570; +extern u8 D_801D2591; +extern s32 D_801D2650; +extern void func_8013D330(void); +extern void *D_801D1058; +extern void *D_801D105C; +extern void *D_801D1060; +extern s32 D_801D1088; +extern s32 D_801D108C; +extern s32 D_801D1090; +extern s32 D_801D25C4[]; +extern u8 D_8018D170[]; +extern u8 D_8018D218[]; +extern u8 D_8018D0C8[]; +extern u8 D_8018D1C4[]; +extern u8 D_8018D244[]; +extern u8 D_8018D11C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D1064; +extern s32 D_801D1094; +extern s32 D_801D1098; +extern s32 D_801D109C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D107C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018DCD0; +extern s32 D_80115188; +extern s16 D_8018DCA8; +extern s16 D_8018DCAA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018DCAC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018D988; +extern u8 *D_8018D98C; +extern u8 *D_8018D990; +extern u8 *D_8018D994; +extern u8 *D_8018D998; +extern u16 *D_8018D99C[]; +extern u16 *D_8018D9A4[]; +extern u16 *D_8018D9C4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018D988; + iVar2 = func_80028D58(); + puVar3 = D_8018D99C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018D98C; + iVar2 = func_80028DE0(); + puVar3 = D_8018D99C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018D990 + 0x18) = *D_8018D9A4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018D994 + 0x18) = *D_8018D9A4[iVar2]; + + puVar1 = D_8018D998; + iVar2 = func_80028D9C(); + puVar3 = D_8018D9C4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018D8C4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018D8C4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018D8D4; +extern char *D_8018D8F4; +extern char *D_8018D8F8; +extern char *D_8018D8FC; +extern char *D_8018D900; +extern char *D_8018D904; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018D8D4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018D8F4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D8F8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D8FC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D900; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D904; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018D78E; +extern unsigned short D_8018D792; +extern unsigned short D_8018D796; +extern unsigned short D_8018D79A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018D78E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D792; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D796; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D79A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018DD24[])(void); + +void func_80141788(void) +{ + D_8018DD24[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018DD30[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018DD30[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018DCA8; +extern s16 D_8018DCAA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018D948; + extern u8 D_8018D960; + extern u8 D_8018D9D4; + extern u8 D_8018D9DC; + extern void *D_801D10B0; + extern void *D_801D10B4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D10B0 = &D_8018D948; + D_801D10B4 = &D_8018D9D4; + } else { + D_801D10B0 = &D_8018D960; + D_801D10B4 = &D_8018D9DC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018DCA8 = 0xE; + D_8018DCAA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018DCAC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018DCAC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018DCAC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018DC84; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018DC84 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018DD54[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018DD54[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018DD64[])(void); + +void func_801425CC(void *a0) { + D_8018DD64[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018DD48; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018DD48); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DD78[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DD78[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DD94[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DD94[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DF64[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DF64[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E01C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E01C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D0734; +extern u8 D_801D10B8; +extern u8 D_801D10B9; +extern u8 D_801D10BA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D0734; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D10B8 = mul * (local.b[0] >> 4); + D_801D10B9 = mul * (local.b[1] >> 4); + D_801D10BA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018DD6C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018DD6C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018DD88[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018DD88); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018DF54[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018DF54[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018DF74[]; +extern unsigned char D_8018DFD4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018DF74); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018DFD4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D0730; +extern u8 D_801D10B8; +extern u8 D_801D10BC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D0730, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D10B8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D10B8, 0x10); + memcpy(&D_801D10BC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018E12C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018E12C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018E254[])(void); + +void func_80143B30(void *a0) { + D_8018E254[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018E260[])(void); + +void func_80143C38(void *a0) { + D_8018E260[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018E268[])(void); + +void func_80143C98(void *a0) { + D_8018E268[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80143D28); + + +extern void (*D_8018E2B0[])(void); + +void func_80143E68(void *a0) { + D_8018E2B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018E2C4[])(void); + +void func_80144054(void *a0) { + D_8018E2C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018E2CC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018E2CC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018E248; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018E248, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018E25C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018E25C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018E25C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018E270; +extern u8 D_8018E27C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018E270); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018E27C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018E248; +extern u8 D_8018E2B8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018E248, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018E2B8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018E2D4[])(void); + +void func_801449C8(void *a0) { + D_8018E2D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018E2DC[])(void); + +void func_80144A2C(void *a0) { + D_8018E2DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c b/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c index a0a52a465..076eb93bb 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185D58; -extern u8 *D_80185D5C; -extern u8 *D_80185D60; -extern u8 *D_80185D64; -extern u8 *D_80185D68; -extern u16 *D_80185D6C[]; -extern u16 *D_80185D74[]; -extern u16 *D_80185D94[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185D58; - iVar2 = func_80028D58(); - puVar3 = D_80185D6C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185D5C; - iVar2 = func_80028DE0(); - puVar3 = D_80185D6C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185D60 + 0x18) = *D_80185D74[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185D64 + 0x18) = *D_80185D74[iVar2]; - - puVar1 = D_80185D68; - iVar2 = func_80028D9C(); - puVar3 = D_80185D94[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185C94; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185C94); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185CA4; -extern char *D_80185CC4; -extern char *D_80185CC8; -extern char *D_80185CCC; -extern char *D_80185CD0; -extern char *D_80185CD4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185CA4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185CC4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185CC8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185CCC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185CD0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185CD4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80185B5E; -extern unsigned short D_80185B62; -extern unsigned short D_80185B66; -extern unsigned short D_80185B6A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80185B5E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185B62; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185B66; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185B6A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801860F4[])(void); - -void func_80141788(void) -{ - D_801860F4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186100[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186100[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186078; -extern s16 D_8018607A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185D18; - extern u8 D_80185D30; - extern u8 D_80185DA4; - extern u8 D_80185DAC; - extern void *D_801B1C78; - extern void *D_801B1C7C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B1C78 = &D_80185D18; - D_801B1C7C = &D_80185DA4; - } else { - D_801B1C78 = &D_80185D30; - D_801B1C7C = &D_80185DAC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186078 = 0xE; - D_8018607A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018607C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018607C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018607C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186054; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186054 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186124[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186124[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186134[])(void); - -void func_801425CC(void *a0) { - D_80186134[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186118; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186118); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186148[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186148[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186164[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186164[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186334[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186334[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801863EC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801863EC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B130C; -extern u8 D_801B1C80; -extern u8 D_801B1C81; -extern u8 D_801B1C82; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B130C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B1C80 = mul * (local.b[0] >> 4); - D_801B1C81 = mul * (local.b[1] >> 4); - D_801B1C82 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018613C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018613C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186158[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186158); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80186324[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80186324[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186344[]; -extern unsigned char D_801863A4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186344); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801863A4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B1308; -extern u8 D_801B1C80; -extern u8 D_801B1C84; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B1308, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B1C80); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B1C80, 0x10); - memcpy(&D_801B1C84, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801864FC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801864FC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80186624[])(void); - -void func_80143B30(void *a0) { - D_80186624[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80186630[])(void); - -void func_80143C38(void *a0) { - D_80186630[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80186638[])(void); - -void func_80143C98(void *a0) { - D_80186638[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80143D28); - - -extern void (*D_80186680[])(void); - -void func_80143E68(void *a0) { - D_80186680[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186694[])(void); - -void func_80144054(void *a0) { - D_80186694[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018669C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018669C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80186618; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80186618, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018662C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018662C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018662C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80186640; -extern u8 D_8018664C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186640); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018664C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80186618; -extern u8 D_80186688; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80186618, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186688, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801866A4[])(void); - -void func_801449C8(void *a0) { - D_801866A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801866AC[])(void); - -void func_80144A2C(void *a0) { - D_801866AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_092/ov_SC03_092_jr_80140608.c b/src/ov_SC03_092/ov_SC03_092_jr_80140608.c new file mode 100644 index 000000000..8297384f9 --- /dev/null +++ b/src/ov_SC03_092/ov_SC03_092_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B097C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184F98[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B1B34; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B3018; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B097C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184CD4)(); +extern s16 (*D_80184CD8)(); +extern M2C_UNK (*D_80184CE0)(); +extern s32 (*D_80184CE4)(); +extern s32 D_801B1B30; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B0980; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018502C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80188510; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185044; +extern M2C_UNK D_8018504C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185054; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185070[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018507C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185090[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801850E0[]; +extern s16 D_80185110[]; +extern s16 D_80185170[]; +extern s16 D_80185178[]; +extern s16 D_80185198[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801851D0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185228[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185270[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185278[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80185280[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80185288[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80185230; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80185250; +extern void func_801321B0(int param_1); +extern int D_80185260; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B1BA0; +extern s32 D_801B1BA4[]; +extern int D_801B1BA8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185294; +extern u8 D_80185290; +extern s16 *D_80185298; +extern u8 D_8018529C; +extern int D_801B1BA0; +extern u16 D_801B1BB0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80185298; /* holds a pointer value (*(u16**)&D_80185298) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801852AC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185300; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185304[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80185348; +extern u8 D_8018538C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801853D0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185448, D_8018544A, D_8018544C, D_8018544E, D_80185450, D_80185452; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B1C18; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B1C1C; +extern s8 D_801B1C1D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B1C3C; +extern s32 D_801B1C30; +extern s32 D_801B1C34; +extern s32 D_801B1C40; +extern void func_8013CABC(void); +extern s32 D_801B1C38; +extern void func_8013CAE8(void); +extern s32 D_801B1C68; +extern s32 D_801B1C6C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B1C48; +extern s32 D_801B1C4C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B3012; +extern u8 D_801B3086; +extern u8 D_801B2F3A; +extern u8 D_801B2FF4; +extern u8 D_801B2F18; +extern u8 D_801B2F39; +extern s32 D_801B2FF8; +extern void func_8013D330(void); +extern void *D_801B1C20; +extern void *D_801B1C24; +extern void *D_801B1C28; +extern s32 D_801B1C50; +extern s32 D_801B1C54; +extern s32 D_801B1C58; +extern s32 D_801B2F6C[]; +extern u8 D_80185540[]; +extern u8 D_801855E8[]; +extern u8 D_80185498[]; +extern u8 D_80185594[]; +extern u8 D_80185614[]; +extern u8 D_801854EC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B1C2C; +extern s32 D_801B1C5C; +extern s32 D_801B1C60; +extern s32 D_801B1C64; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B1C44; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801860A0; +extern s32 D_80115188; +extern s16 D_80186078; +extern s16 D_8018607A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018607C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185D58; +extern u8 *D_80185D5C; +extern u8 *D_80185D60; +extern u8 *D_80185D64; +extern u8 *D_80185D68; +extern u16 *D_80185D6C[]; +extern u16 *D_80185D74[]; +extern u16 *D_80185D94[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185D58; + iVar2 = func_80028D58(); + puVar3 = D_80185D6C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185D5C; + iVar2 = func_80028DE0(); + puVar3 = D_80185D6C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185D60 + 0x18) = *D_80185D74[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185D64 + 0x18) = *D_80185D74[iVar2]; + + puVar1 = D_80185D68; + iVar2 = func_80028D9C(); + puVar3 = D_80185D94[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185C94; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185C94); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185CA4; +extern char *D_80185CC4; +extern char *D_80185CC8; +extern char *D_80185CCC; +extern char *D_80185CD0; +extern char *D_80185CD4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185CA4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185CC4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185CC8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185CCC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185CD0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185CD4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80185B5E; +extern unsigned short D_80185B62; +extern unsigned short D_80185B66; +extern unsigned short D_80185B6A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80185B5E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185B62; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185B66; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185B6A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801860F4[])(void); + +void func_80141788(void) +{ + D_801860F4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186100[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186100[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186078; +extern s16 D_8018607A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185D18; + extern u8 D_80185D30; + extern u8 D_80185DA4; + extern u8 D_80185DAC; + extern void *D_801B1C78; + extern void *D_801B1C7C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B1C78 = &D_80185D18; + D_801B1C7C = &D_80185DA4; + } else { + D_801B1C78 = &D_80185D30; + D_801B1C7C = &D_80185DAC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186078 = 0xE; + D_8018607A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018607C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018607C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018607C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186054; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186054 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186124[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186124[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186134[])(void); + +void func_801425CC(void *a0) { + D_80186134[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186118; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186118); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186148[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186148[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186164[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186164[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186334[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186334[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801863EC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801863EC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B130C; +extern u8 D_801B1C80; +extern u8 D_801B1C81; +extern u8 D_801B1C82; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B130C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B1C80 = mul * (local.b[0] >> 4); + D_801B1C81 = mul * (local.b[1] >> 4); + D_801B1C82 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018613C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018613C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186158[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186158); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80186324[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80186324[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186344[]; +extern unsigned char D_801863A4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186344); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801863A4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B1308; +extern u8 D_801B1C80; +extern u8 D_801B1C84; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B1308, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B1C80); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B1C80, 0x10); + memcpy(&D_801B1C84, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801864FC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801864FC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80186624[])(void); + +void func_80143B30(void *a0) { + D_80186624[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80186630[])(void); + +void func_80143C38(void *a0) { + D_80186630[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80186638[])(void); + +void func_80143C98(void *a0) { + D_80186638[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80143D28); + + +extern void (*D_80186680[])(void); + +void func_80143E68(void *a0) { + D_80186680[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186694[])(void); + +void func_80144054(void *a0) { + D_80186694[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018669C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018669C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186618; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80186618, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018662C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018662C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018662C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80186640; +extern u8 D_8018664C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186640); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018664C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80186618; +extern u8 D_80186688; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80186618, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186688, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801866A4[])(void); + +void func_801449C8(void *a0) { + D_801866A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801866AC[])(void); + +void func_80144A2C(void *a0) { + D_801866AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c b/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c index bbb88d9a4..0a386382d 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80186F30; -extern u8 *D_80186F34; -extern u8 *D_80186F38; -extern u8 *D_80186F3C; -extern u8 *D_80186F40; -extern u16 *D_80186F44[]; -extern u16 *D_80186F4C[]; -extern u16 *D_80186F6C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80186F30; - iVar2 = func_80028D58(); - puVar3 = D_80186F44[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80186F34; - iVar2 = func_80028DE0(); - puVar3 = D_80186F44[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80186F38 + 0x18) = *D_80186F4C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80186F3C + 0x18) = *D_80186F4C[iVar2]; - - puVar1 = D_80186F40; - iVar2 = func_80028D9C(); - puVar3 = D_80186F6C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80186E6C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80186E6C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80186E7C; -extern char *D_80186E9C; -extern char *D_80186EA0; -extern char *D_80186EA4; -extern char *D_80186EA8; -extern char *D_80186EAC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80186E7C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80186E9C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186EA0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186EA4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186EA8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186EAC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80186D36; -extern unsigned short D_80186D3A; -extern unsigned short D_80186D3E; -extern unsigned short D_80186D42; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80186D36; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80186D3A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186D3E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186D42; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801872CC[])(void); - -void func_80141788(void) -{ - D_801872CC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801872D8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801872D8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80187250; -extern s16 D_80187252; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186EF0; - extern u8 D_80186F08; - extern u8 D_80186F7C; - extern u8 D_80186F84; - extern void *D_801CB0E8; - extern void *D_801CB0EC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CB0E8 = &D_80186EF0; - D_801CB0EC = &D_80186F7C; - } else { - D_801CB0E8 = &D_80186F08; - D_801CB0EC = &D_80186F84; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80187250 = 0xE; - D_80187252 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80187254: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80187254; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80187254); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018722C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018722C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801872FC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801872FC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018730C[])(void); - -void func_801425CC(void *a0) { - D_8018730C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801872F0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801872F0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187320[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187320[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018733C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018733C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018750C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018750C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801875C4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801875C4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CA760; -extern u8 D_801CB0F0; -extern u8 D_801CB0F1; -extern u8 D_801CB0F2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CA760; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CB0F0 = mul * (local.b[0] >> 4); - D_801CB0F1 = mul * (local.b[1] >> 4); - D_801CB0F2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80187314; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187314); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187330[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187330); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801874FC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801874FC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018751C[]; -extern unsigned char D_8018757C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018751C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018757C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CA75C; -extern u8 D_801CB0F0; -extern u8 D_801CB0F4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CA75C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CB0F0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CB0F0, 0x10); - memcpy(&D_801CB0F4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801876D4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801876D4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801877FC[])(void); - -void func_80143B30(void *a0) { - D_801877FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80187808[])(void); - -void func_80143C38(void *a0) { - D_80187808[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80187810[])(void); - -void func_80143C98(void *a0) { - D_80187810[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80143D28); - - -extern void (*D_80187858[])(void); - -void func_80143E68(void *a0) { - D_80187858[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018786C[])(void); - -void func_80144054(void *a0) { - D_8018786C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80187874[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80187874[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801877F0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801877F0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80187804; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187804 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187804 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80187818; -extern u8 D_80187824; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187818); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187824); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801877F0; -extern u8 D_80187860; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801877F0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80187860, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018787C[])(void); - -void func_801449C8(void *a0) { - D_8018787C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80187884[])(void); - -void func_80144A2C(void *a0) { - D_80187884[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_093/ov_SC03_093_jr_80140608.c b/src/ov_SC03_093/ov_SC03_093_jr_80140608.c new file mode 100644 index 000000000..aa7525157 --- /dev/null +++ b/src/ov_SC03_093/ov_SC03_093_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C9DD0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80186170[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CAFA4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801CC670; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C9DD0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80185EAC)(); +extern s16 (*D_80185EB0)(); +extern M2C_UNK (*D_80185EB8)(); +extern s32 (*D_80185EBC)(); +extern s32 D_801CAFA0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C9DD4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80186204; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801896E8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018621C; +extern M2C_UNK D_80186224; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018622C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80186248[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80186254[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80186268[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801862B8[]; +extern s16 D_801862E8[]; +extern s16 D_80186348[]; +extern s16 D_80186350[]; +extern s16 D_80186370[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801863A8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80186400[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80186448[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80186450[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80186458[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80186460[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80186408; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80186428; +extern void func_801321B0(int param_1); +extern int D_80186438; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CB010; +extern s32 D_801CB014[]; +extern int D_801CB018; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018646C; +extern u8 D_80186468; +extern s16 *D_80186470; +extern u8 D_80186474; +extern int D_801CB010; +extern u16 D_801CB020; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186470; /* holds a pointer value (*(u16**)&D_80186470) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186484[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801864D8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801864DC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80186520; +extern u8 D_80186564; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801865A8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80186620, D_80186622, D_80186624, D_80186626, D_80186628, D_8018662A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CB088; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CB08C; +extern s8 D_801CB08D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CB0AC; +extern s32 D_801CB0A0; +extern s32 D_801CB0A4; +extern s32 D_801CB0B0; +extern void func_8013CABC(void); +extern s32 D_801CB0A8; +extern void func_8013CAE8(void); +extern s32 D_801CB0D8; +extern s32 D_801CB0DC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CB0B8; +extern s32 D_801CB0BC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801CC66A; +extern u8 D_801CC6DE; +extern u8 D_801CC592; +extern u8 D_801CC64C; +extern u8 D_801CC570; +extern u8 D_801CC591; +extern s32 D_801CC650; +extern void func_8013D330(void); +extern void *D_801CB090; +extern void *D_801CB094; +extern void *D_801CB098; +extern s32 D_801CB0C0; +extern s32 D_801CB0C4; +extern s32 D_801CB0C8; +extern s32 D_801CC5C4[]; +extern u8 D_80186718[]; +extern u8 D_801867C0[]; +extern u8 D_80186670[]; +extern u8 D_8018676C[]; +extern u8 D_801867EC[]; +extern u8 D_801866C4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CB09C; +extern s32 D_801CB0CC; +extern s32 D_801CB0D0; +extern s32 D_801CB0D4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CB0B4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80187278; +extern s32 D_80115188; +extern s16 D_80187250; +extern s16 D_80187252; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80187254; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80186F30; +extern u8 *D_80186F34; +extern u8 *D_80186F38; +extern u8 *D_80186F3C; +extern u8 *D_80186F40; +extern u16 *D_80186F44[]; +extern u16 *D_80186F4C[]; +extern u16 *D_80186F6C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80186F30; + iVar2 = func_80028D58(); + puVar3 = D_80186F44[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80186F34; + iVar2 = func_80028DE0(); + puVar3 = D_80186F44[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80186F38 + 0x18) = *D_80186F4C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80186F3C + 0x18) = *D_80186F4C[iVar2]; + + puVar1 = D_80186F40; + iVar2 = func_80028D9C(); + puVar3 = D_80186F6C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80186E6C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80186E6C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80186E7C; +extern char *D_80186E9C; +extern char *D_80186EA0; +extern char *D_80186EA4; +extern char *D_80186EA8; +extern char *D_80186EAC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80186E7C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80186E9C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186EA0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186EA4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186EA8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186EAC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80186D36; +extern unsigned short D_80186D3A; +extern unsigned short D_80186D3E; +extern unsigned short D_80186D42; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80186D36; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80186D3A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186D3E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186D42; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801872CC[])(void); + +void func_80141788(void) +{ + D_801872CC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801872D8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801872D8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80187250; +extern s16 D_80187252; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186EF0; + extern u8 D_80186F08; + extern u8 D_80186F7C; + extern u8 D_80186F84; + extern void *D_801CB0E8; + extern void *D_801CB0EC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CB0E8 = &D_80186EF0; + D_801CB0EC = &D_80186F7C; + } else { + D_801CB0E8 = &D_80186F08; + D_801CB0EC = &D_80186F84; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80187250 = 0xE; + D_80187252 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80187254: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80187254; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80187254); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018722C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018722C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801872FC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801872FC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018730C[])(void); + +void func_801425CC(void *a0) { + D_8018730C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801872F0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801872F0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187320[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187320[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018733C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018733C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018750C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018750C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801875C4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801875C4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CA760; +extern u8 D_801CB0F0; +extern u8 D_801CB0F1; +extern u8 D_801CB0F2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CA760; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CB0F0 = mul * (local.b[0] >> 4); + D_801CB0F1 = mul * (local.b[1] >> 4); + D_801CB0F2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80187314; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187314); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187330[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187330); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801874FC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801874FC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018751C[]; +extern unsigned char D_8018757C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018751C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018757C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CA75C; +extern u8 D_801CB0F0; +extern u8 D_801CB0F4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CA75C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CB0F0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CB0F0, 0x10); + memcpy(&D_801CB0F4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801876D4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801876D4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801877FC[])(void); + +void func_80143B30(void *a0) { + D_801877FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80187808[])(void); + +void func_80143C38(void *a0) { + D_80187808[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80187810[])(void); + +void func_80143C98(void *a0) { + D_80187810[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80143D28); + + +extern void (*D_80187858[])(void); + +void func_80143E68(void *a0) { + D_80187858[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018786C[])(void); + +void func_80144054(void *a0) { + D_8018786C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80187874[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80187874[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801877F0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801877F0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80187804; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187804 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187804 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80187818; +extern u8 D_80187824; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187818); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187824); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801877F0; +extern u8 D_80187860; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801877F0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80187860, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018787C[])(void); + +void func_801449C8(void *a0) { + D_8018787C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80187884[])(void); + +void func_80144A2C(void *a0) { + D_80187884[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c b/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c index f1ee8140e..2496140e5 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018892C; -extern u8 *D_80188930; -extern u8 *D_80188934; -extern u8 *D_80188938; -extern u8 *D_8018893C; -extern u16 *D_80188940[]; -extern u16 *D_80188948[]; -extern u16 *D_80188968[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018892C; - iVar2 = func_80028D58(); - puVar3 = D_80188940[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80188930; - iVar2 = func_80028DE0(); - puVar3 = D_80188940[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80188934 + 0x18) = *D_80188948[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80188938 + 0x18) = *D_80188948[iVar2]; - - puVar1 = D_8018893C; - iVar2 = func_80028D9C(); - puVar3 = D_80188968[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80188868; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80188868); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80188878; -extern char *D_80188898; -extern char *D_8018889C; -extern char *D_801888A0; -extern char *D_801888A4; -extern char *D_801888A8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80188878); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80188898; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018889C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801888A0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801888A4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801888A8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80188732; -extern unsigned short D_80188736; -extern unsigned short D_8018873A; -extern unsigned short D_8018873E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80188732; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80188736; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018873A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018873E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80188CC8[])(void); - -void func_80141788(void) -{ - D_80188CC8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80188CD4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80188CD4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80188C4C; -extern s16 D_80188C4E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801888EC; - extern u8 D_80188904; - extern u8 D_80188978; - extern u8 D_80188980; - extern void *D_801D1F28; - extern void *D_801D1F2C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D1F28 = &D_801888EC; - D_801D1F2C = &D_80188978; - } else { - D_801D1F28 = &D_80188904; - D_801D1F2C = &D_80188980; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80188C4C = 0xE; - D_80188C4E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80188C50: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80188C50; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80188C50); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80188C28; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80188C28 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80188CF8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80188CF8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80188D08[])(void); - -void func_801425CC(void *a0) { - D_80188D08[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80188CEC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80188CEC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188D1C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188D1C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188D38[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188D38[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188F08[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188F08[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188FC0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188FC0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D159C; -extern u8 D_801D1F30; -extern u8 D_801D1F31; -extern u8 D_801D1F32; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D159C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D1F30 = mul * (local.b[0] >> 4); - D_801D1F31 = mul * (local.b[1] >> 4); - D_801D1F32 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80188D10; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188D10); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188D2C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188D2C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80188EF8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80188EF8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188F18[]; -extern unsigned char D_80188F78[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188F18); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80188F78); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D1598; -extern u8 D_801D1F30; -extern u8 D_801D1F34; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D1598, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D1F30); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D1F30, 0x10); - memcpy(&D_801D1F34, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801890D0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801890D0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801891F8[])(void); - -void func_80143B30(void *a0) { - D_801891F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80189204[])(void); - -void func_80143C38(void *a0) { - D_80189204[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018920C[])(void); - -void func_80143C98(void *a0) { - D_8018920C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80143D28); - - -extern void (*D_80189254[])(void); - -void func_80143E68(void *a0) { - D_80189254[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80189268[])(void); - -void func_80144054(void *a0) { - D_80189268[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80189270[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80189270[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801891EC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801891EC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80189200; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189200 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189200 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80189214; -extern u8 D_80189220; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189214); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189220); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801891EC; -extern u8 D_8018925C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801891EC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018925C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80189278[])(void); - -void func_801449C8(void *a0) { - D_80189278[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80189280[])(void); - -void func_80144A2C(void *a0) { - D_80189280[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_094/ov_SC03_094_jr_80140608.c b/src/ov_SC03_094/ov_SC03_094_jr_80140608.c new file mode 100644 index 000000000..e6759374d --- /dev/null +++ b/src/ov_SC03_094/ov_SC03_094_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801D0C0C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80187B6C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D1DE4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D3228; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801D0C0C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801878A8)(); +extern s16 (*D_801878AC)(); +extern M2C_UNK (*D_801878B4)(); +extern s32 (*D_801878B8)(); +extern s32 D_801D1DE0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801D0C10; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80187C00; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018B0E4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80187C18; +extern M2C_UNK D_80187C20; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80187C28; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80187C44[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80187C50[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80187C64[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80187CB4[]; +extern s16 D_80187CE4[]; +extern s16 D_80187D44[]; +extern s16 D_80187D4C[]; +extern s16 D_80187D6C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80187DA4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80187DFC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80187E44[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80187E4C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80187E54[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80187E5C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80187E04; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80187E24; +extern void func_801321B0(int param_1); +extern int D_80187E34; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D1E50; +extern s32 D_801D1E54[]; +extern int D_801D1E58; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80187E68; +extern u8 D_80187E64; +extern s16 *D_80187E6C; +extern u8 D_80187E70; +extern int D_801D1E50; +extern u16 D_801D1E60; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80187E6C; /* holds a pointer value (*(u16**)&D_80187E6C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80187E80[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80187ED4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80187ED8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80187F1C; +extern u8 D_80187F60; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80187FA4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018801C, D_8018801E, D_80188020, D_80188022, D_80188024, D_80188026; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D1EC8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D1ECC; +extern s8 D_801D1ECD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D1EEC; +extern s32 D_801D1EE0; +extern s32 D_801D1EE4; +extern s32 D_801D1EF0; +extern void func_8013CABC(void); +extern s32 D_801D1EE8; +extern void func_8013CAE8(void); +extern s32 D_801D1F18; +extern s32 D_801D1F1C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D1EF8; +extern s32 D_801D1EFC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D3222; +extern u8 D_801D3296; +extern u8 D_801D314A; +extern u8 D_801D3204; +extern u8 D_801D3128; +extern u8 D_801D3149; +extern s32 D_801D3208; +extern void func_8013D330(void); +extern void *D_801D1ED0; +extern void *D_801D1ED4; +extern void *D_801D1ED8; +extern s32 D_801D1F00; +extern s32 D_801D1F04; +extern s32 D_801D1F08; +extern s32 D_801D317C[]; +extern u8 D_80188114[]; +extern u8 D_801881BC[]; +extern u8 D_8018806C[]; +extern u8 D_80188168[]; +extern u8 D_801881E8[]; +extern u8 D_801880C0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D1EDC; +extern s32 D_801D1F0C; +extern s32 D_801D1F10; +extern s32 D_801D1F14; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D1EF4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80188C74; +extern s32 D_80115188; +extern s16 D_80188C4C; +extern s16 D_80188C4E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80188C50; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018892C; +extern u8 *D_80188930; +extern u8 *D_80188934; +extern u8 *D_80188938; +extern u8 *D_8018893C; +extern u16 *D_80188940[]; +extern u16 *D_80188948[]; +extern u16 *D_80188968[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018892C; + iVar2 = func_80028D58(); + puVar3 = D_80188940[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80188930; + iVar2 = func_80028DE0(); + puVar3 = D_80188940[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80188934 + 0x18) = *D_80188948[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80188938 + 0x18) = *D_80188948[iVar2]; + + puVar1 = D_8018893C; + iVar2 = func_80028D9C(); + puVar3 = D_80188968[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80188868; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80188868); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80188878; +extern char *D_80188898; +extern char *D_8018889C; +extern char *D_801888A0; +extern char *D_801888A4; +extern char *D_801888A8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80188878); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80188898; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018889C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801888A0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801888A4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801888A8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80188732; +extern unsigned short D_80188736; +extern unsigned short D_8018873A; +extern unsigned short D_8018873E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80188732; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80188736; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018873A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018873E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80188CC8[])(void); + +void func_80141788(void) +{ + D_80188CC8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80188CD4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80188CD4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80188C4C; +extern s16 D_80188C4E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801888EC; + extern u8 D_80188904; + extern u8 D_80188978; + extern u8 D_80188980; + extern void *D_801D1F28; + extern void *D_801D1F2C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D1F28 = &D_801888EC; + D_801D1F2C = &D_80188978; + } else { + D_801D1F28 = &D_80188904; + D_801D1F2C = &D_80188980; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80188C4C = 0xE; + D_80188C4E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80188C50: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80188C50; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80188C50); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80188C28; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80188C28 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80188CF8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80188CF8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80188D08[])(void); + +void func_801425CC(void *a0) { + D_80188D08[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80188CEC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80188CEC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188D1C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188D1C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188D38[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188D38[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188F08[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188F08[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188FC0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188FC0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D159C; +extern u8 D_801D1F30; +extern u8 D_801D1F31; +extern u8 D_801D1F32; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D159C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D1F30 = mul * (local.b[0] >> 4); + D_801D1F31 = mul * (local.b[1] >> 4); + D_801D1F32 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80188D10; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188D10); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188D2C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188D2C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80188EF8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80188EF8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188F18[]; +extern unsigned char D_80188F78[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188F18); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80188F78); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D1598; +extern u8 D_801D1F30; +extern u8 D_801D1F34; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D1598, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D1F30); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D1F30, 0x10); + memcpy(&D_801D1F34, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801890D0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801890D0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801891F8[])(void); + +void func_80143B30(void *a0) { + D_801891F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80189204[])(void); + +void func_80143C38(void *a0) { + D_80189204[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018920C[])(void); + +void func_80143C98(void *a0) { + D_8018920C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80143D28); + + +extern void (*D_80189254[])(void); + +void func_80143E68(void *a0) { + D_80189254[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80189268[])(void); + +void func_80144054(void *a0) { + D_80189268[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80189270[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80189270[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801891EC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801891EC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80189200; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189200 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189200 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80189214; +extern u8 D_80189220; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189214); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189220); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801891EC; +extern u8 D_8018925C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801891EC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018925C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80189278[])(void); + +void func_801449C8(void *a0) { + D_80189278[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80189280[])(void); + +void func_80144A2C(void *a0) { + D_80189280[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c b/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c index bcd721d6a..381266471 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181F8C; -extern u8 *D_80181F90; -extern u8 *D_80181F94; -extern u8 *D_80181F98; -extern u8 *D_80181F9C; -extern u16 *D_80181FA0[]; -extern u16 *D_80181FA8[]; -extern u16 *D_80181FC8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181F8C; - iVar2 = func_80028D58(); - puVar3 = D_80181FA0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181F90; - iVar2 = func_80028DE0(); - puVar3 = D_80181FA0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80181F94 + 0x18) = *D_80181FA8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80181F98 + 0x18) = *D_80181FA8[iVar2]; - - puVar1 = D_80181F9C; - iVar2 = func_80028D9C(); - puVar3 = D_80181FC8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80181EC8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80181EC8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80181ED8; -extern char *D_80181EF8; -extern char *D_80181EFC; -extern char *D_80181F00; -extern char *D_80181F04; -extern char *D_80181F08; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80181ED8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80181EF8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181EFC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181F00; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181F04; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181F08; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80181D92; -extern unsigned short D_80181D96; -extern unsigned short D_80181D9A; -extern unsigned short D_80181D9E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80181D92; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80181D96; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181D9A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181D9E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80182328[])(void); - -void func_80141788(void) -{ - D_80182328[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80182334[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80182334[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801822AC; -extern s16 D_801822AE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181F4C; - extern u8 D_80181F64; - extern u8 D_80181FD8; - extern u8 D_80181FE0; - extern void *D_8019AB20; - extern void *D_8019AB24; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019AB20 = &D_80181F4C; - D_8019AB24 = &D_80181FD8; - } else { - D_8019AB20 = &D_80181F64; - D_8019AB24 = &D_80181FE0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801822AC = 0xE; - D_801822AE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801822B0: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801822B0; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801822B0); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80182288; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80182288 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80182358[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80182358[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80182368[])(void); - -void func_801425CC(void *a0) { - D_80182368[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018234C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018234C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018237C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018237C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182398[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182398[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182568[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182568[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182620[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182620[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019A1C8; -extern u8 D_8019AB28; -extern u8 D_8019AB29; -extern u8 D_8019AB2A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019A1C8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019AB28 = mul * (local.b[0] >> 4); - D_8019AB29 = mul * (local.b[1] >> 4); - D_8019AB2A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80182370; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80182370); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018238C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018238C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80182558[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80182558[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80182578[]; -extern unsigned char D_801825D8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182578); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801825D8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019A1C4; -extern u8 D_8019AB28; -extern u8 D_8019AB2C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019A1C4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019AB28); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019AB28, 0x10); - memcpy(&D_8019AB2C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80182730[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80182730[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80182858[])(void); - -void func_80143B30(void *a0) { - D_80182858[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80182864[])(void); - -void func_80143C38(void *a0) { - D_80182864[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018286C[])(void); - -void func_80143C98(void *a0) { - D_8018286C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80143D28); - - -extern void (*D_801828B4[])(void); - -void func_80143E68(void *a0) { - D_801828B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801828C8[])(void); - -void func_80144054(void *a0) { - D_801828C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801828D0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801828D0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018284C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018284C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80182860; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182860 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182860 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80182874; -extern u8 D_80182880; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182874); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182880); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018284C; -extern u8 D_801828BC; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018284C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801828BC, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801828D8[])(void); - -void func_801449C8(void *a0) { - D_801828D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801828E0[])(void); - -void func_80144A2C(void *a0) { - D_801828E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_095/ov_SC03_095_jr_80140608.c b/src/ov_SC03_095/ov_SC03_095_jr_80140608.c new file mode 100644 index 000000000..fccc4d682 --- /dev/null +++ b/src/ov_SC03_095/ov_SC03_095_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80199838; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801811CC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019A9DC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019BE28; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80199838; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80180F08)(); +extern s16 (*D_80180F0C)(); +extern M2C_UNK (*D_80180F14)(); +extern s32 (*D_80180F18)(); +extern s32 D_8019A9D8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019983C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80181260; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80184744; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80181278; +extern M2C_UNK D_80181280; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80181288; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801812A4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801812B0[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801812C4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80181314[]; +extern s16 D_80181344[]; +extern s16 D_801813A4[]; +extern s16 D_801813AC[]; +extern s16 D_801813CC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80181404[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018145C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801814A4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801814AC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801814B4[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801814BC[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80181464; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80181484; +extern void func_801321B0(int param_1); +extern int D_80181494; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019AA48; +extern s32 D_8019AA4C[]; +extern int D_8019AA50; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801814C8; +extern u8 D_801814C4; +extern s16 *D_801814CC; +extern u8 D_801814D0; +extern int D_8019AA48; +extern u16 D_8019AA58; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801814CC; /* holds a pointer value (*(u16**)&D_801814CC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801814E0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80181534; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80181538[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018157C; +extern u8 D_801815C0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80181604[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018167C, D_8018167E, D_80181680, D_80181682, D_80181684, D_80181686; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019AAC0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019AAC4; +extern s8 D_8019AAC5; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019AAE4; +extern s32 D_8019AAD8; +extern s32 D_8019AADC; +extern s32 D_8019AAE8; +extern void func_8013CABC(void); +extern s32 D_8019AAE0; +extern void func_8013CAE8(void); +extern s32 D_8019AB10; +extern s32 D_8019AB14; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019AAF0; +extern s32 D_8019AAF4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019BE22; +extern u8 D_8019BE96; +extern u8 D_8019BD4A; +extern u8 D_8019BE04; +extern u8 D_8019BD28; +extern u8 D_8019BD49; +extern s32 D_8019BE08; +extern void func_8013D330(void); +extern void *D_8019AAC8; +extern void *D_8019AACC; +extern void *D_8019AAD0; +extern s32 D_8019AAF8; +extern s32 D_8019AAFC; +extern s32 D_8019AB00; +extern s32 D_8019BD7C[]; +extern u8 D_80181774[]; +extern u8 D_8018181C[]; +extern u8 D_801816CC[]; +extern u8 D_801817C8[]; +extern u8 D_80181848[]; +extern u8 D_80181720[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019AAD4; +extern s32 D_8019AB04; +extern s32 D_8019AB08; +extern s32 D_8019AB0C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019AAEC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801822D4; +extern s32 D_80115188; +extern s16 D_801822AC; +extern s16 D_801822AE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801822B0; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181F8C; +extern u8 *D_80181F90; +extern u8 *D_80181F94; +extern u8 *D_80181F98; +extern u8 *D_80181F9C; +extern u16 *D_80181FA0[]; +extern u16 *D_80181FA8[]; +extern u16 *D_80181FC8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181F8C; + iVar2 = func_80028D58(); + puVar3 = D_80181FA0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181F90; + iVar2 = func_80028DE0(); + puVar3 = D_80181FA0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80181F94 + 0x18) = *D_80181FA8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80181F98 + 0x18) = *D_80181FA8[iVar2]; + + puVar1 = D_80181F9C; + iVar2 = func_80028D9C(); + puVar3 = D_80181FC8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80181EC8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80181EC8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80181ED8; +extern char *D_80181EF8; +extern char *D_80181EFC; +extern char *D_80181F00; +extern char *D_80181F04; +extern char *D_80181F08; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80181ED8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80181EF8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181EFC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181F00; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181F04; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181F08; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80181D92; +extern unsigned short D_80181D96; +extern unsigned short D_80181D9A; +extern unsigned short D_80181D9E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80181D92; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80181D96; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181D9A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181D9E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80182328[])(void); + +void func_80141788(void) +{ + D_80182328[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80182334[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80182334[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801822AC; +extern s16 D_801822AE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181F4C; + extern u8 D_80181F64; + extern u8 D_80181FD8; + extern u8 D_80181FE0; + extern void *D_8019AB20; + extern void *D_8019AB24; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019AB20 = &D_80181F4C; + D_8019AB24 = &D_80181FD8; + } else { + D_8019AB20 = &D_80181F64; + D_8019AB24 = &D_80181FE0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801822AC = 0xE; + D_801822AE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801822B0: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801822B0; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801822B0); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80182288; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80182288 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80182358[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80182358[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80182368[])(void); + +void func_801425CC(void *a0) { + D_80182368[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018234C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018234C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018237C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018237C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182398[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182398[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182568[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182568[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182620[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182620[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019A1C8; +extern u8 D_8019AB28; +extern u8 D_8019AB29; +extern u8 D_8019AB2A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019A1C8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019AB28 = mul * (local.b[0] >> 4); + D_8019AB29 = mul * (local.b[1] >> 4); + D_8019AB2A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80182370; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80182370); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018238C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018238C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80182558[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80182558[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80182578[]; +extern unsigned char D_801825D8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182578); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801825D8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019A1C4; +extern u8 D_8019AB28; +extern u8 D_8019AB2C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019A1C4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019AB28); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019AB28, 0x10); + memcpy(&D_8019AB2C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80182730[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80182730[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80182858[])(void); + +void func_80143B30(void *a0) { + D_80182858[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80182864[])(void); + +void func_80143C38(void *a0) { + D_80182864[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018286C[])(void); + +void func_80143C98(void *a0) { + D_8018286C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80143D28); + + +extern void (*D_801828B4[])(void); + +void func_80143E68(void *a0) { + D_801828B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801828C8[])(void); + +void func_80144054(void *a0) { + D_801828C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801828D0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801828D0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018284C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018284C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80182860; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182860 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182860 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80182874; +extern u8 D_80182880; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182874); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182880); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018284C; +extern u8 D_801828BC; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018284C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801828BC, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801828D8[])(void); + +void func_801449C8(void *a0) { + D_801828D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801828E0[])(void); + +void func_80144A2C(void *a0) { + D_801828E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c b/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c index 43bfc51d6..f3d0f6a87 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181B0C; -extern u8 *D_80181B10; -extern u8 *D_80181B14; -extern u8 *D_80181B18; -extern u8 *D_80181B1C; -extern u16 *D_80181B20[]; -extern u16 *D_80181B28[]; -extern u16 *D_80181B48[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181B0C; - iVar2 = func_80028D58(); - puVar3 = D_80181B20[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181B10; - iVar2 = func_80028DE0(); - puVar3 = D_80181B20[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80181B14 + 0x18) = *D_80181B28[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80181B18 + 0x18) = *D_80181B28[iVar2]; - - puVar1 = D_80181B1C; - iVar2 = func_80028D9C(); - puVar3 = D_80181B48[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80181A48; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80181A48); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80181A58; -extern char *D_80181A78; -extern char *D_80181A7C; -extern char *D_80181A80; -extern char *D_80181A84; -extern char *D_80181A88; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80181A58); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80181A78; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A7C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A80; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A84; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A88; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80181912; -extern unsigned short D_80181916; -extern unsigned short D_8018191A; -extern unsigned short D_8018191E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80181912; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80181916; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018191A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018191E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80181EA8[])(void); - -void func_80141788(void) -{ - D_80181EA8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80181EB4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80181EB4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80181E2C; -extern s16 D_80181E2E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181ACC; - extern u8 D_80181AE4; - extern u8 D_80181B58; - extern u8 D_80181B60; - extern void *D_801995D8; - extern void *D_801995DC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801995D8 = &D_80181ACC; - D_801995DC = &D_80181B58; - } else { - D_801995D8 = &D_80181AE4; - D_801995DC = &D_80181B60; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80181E2C = 0xE; - D_80181E2E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80181E30: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80181E30; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80181E30); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80181E08; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80181E08 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80181ED8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80181ED8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80181EE8[])(void); - -void func_801425CC(void *a0) { - D_80181EE8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80181ECC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80181ECC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181EFC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181EFC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181F18[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181F18[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801820E8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801820E8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801821A0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801821A0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80198C7C; -extern u8 D_801995E0; -extern u8 D_801995E1; -extern u8 D_801995E2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80198C7C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801995E0 = mul * (local.b[0] >> 4); - D_801995E1 = mul * (local.b[1] >> 4); - D_801995E2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80181EF0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181EF0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181F0C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181F0C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801820D8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801820D8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801820F8[]; -extern unsigned char D_80182158[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801820F8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80182158); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80198C78; -extern u8 D_801995E0; -extern u8 D_801995E4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80198C78, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801995E0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801995E0, 0x10); - memcpy(&D_801995E4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801822B0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801822B0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801823D8[])(void); - -void func_80143B30(void *a0) { - D_801823D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801823E4[])(void); - -void func_80143C38(void *a0) { - D_801823E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801823EC[])(void); - -void func_80143C98(void *a0) { - D_801823EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80143D28); - - -extern void (*D_80182434[])(void); - -void func_80143E68(void *a0) { - D_80182434[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80182448[])(void); - -void func_80144054(void *a0) { - D_80182448[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80182450[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80182450[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801823CC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801823CC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801823E0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801823E0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801823E0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801823F4; -extern u8 D_80182400; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801823F4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182400); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801823CC; -extern u8 D_8018243C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801823CC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018243C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80182458[])(void); - -void func_801449C8(void *a0) { - D_80182458[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80182460[])(void); - -void func_80144A2C(void *a0) { - D_80182460[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_096/ov_SC03_096_jr_80140608.c b/src/ov_SC03_096/ov_SC03_096_jr_80140608.c new file mode 100644 index 000000000..e4b2c6f46 --- /dev/null +++ b/src/ov_SC03_096/ov_SC03_096_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801982EC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80180D4C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80199494; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019A8E0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801982EC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80180A88)(); +extern s16 (*D_80180A8C)(); +extern M2C_UNK (*D_80180A94)(); +extern s32 (*D_80180A98)(); +extern s32 D_80199490; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801982F0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80180DE0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801842C4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80180DF8; +extern M2C_UNK D_80180E00; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80180E08; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80180E24[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80180E30[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80180E44[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80180E94[]; +extern s16 D_80180EC4[]; +extern s16 D_80180F24[]; +extern s16 D_80180F2C[]; +extern s16 D_80180F4C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80180F84[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80180FDC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80181024[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018102C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80181034[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018103C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80180FE4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80181004; +extern void func_801321B0(int param_1); +extern int D_80181014; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80199500; +extern s32 D_80199504[]; +extern int D_80199508; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80181048; +extern u8 D_80181044; +extern s16 *D_8018104C; +extern u8 D_80181050; +extern int D_80199500; +extern u16 D_80199510; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018104C; /* holds a pointer value (*(u16**)&D_8018104C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80181060[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801810B4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801810B8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801810FC; +extern u8 D_80181140; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80181184[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801811FC, D_801811FE, D_80181200, D_80181202, D_80181204, D_80181206; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80199578; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019957C; +extern s8 D_8019957D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019959C; +extern s32 D_80199590; +extern s32 D_80199594; +extern s32 D_801995A0; +extern void func_8013CABC(void); +extern s32 D_80199598; +extern void func_8013CAE8(void); +extern s32 D_801995C8; +extern s32 D_801995CC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801995A8; +extern s32 D_801995AC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019A8DA; +extern u8 D_8019A94E; +extern u8 D_8019A802; +extern u8 D_8019A8BC; +extern u8 D_8019A7E0; +extern u8 D_8019A801; +extern s32 D_8019A8C0; +extern void func_8013D330(void); +extern void *D_80199580; +extern void *D_80199584; +extern void *D_80199588; +extern s32 D_801995B0; +extern s32 D_801995B4; +extern s32 D_801995B8; +extern s32 D_8019A834[]; +extern u8 D_801812F4[]; +extern u8 D_8018139C[]; +extern u8 D_8018124C[]; +extern u8 D_80181348[]; +extern u8 D_801813C8[]; +extern u8 D_801812A0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019958C; +extern s32 D_801995BC; +extern s32 D_801995C0; +extern s32 D_801995C4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801995A4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80181E54; +extern s32 D_80115188; +extern s16 D_80181E2C; +extern s16 D_80181E2E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80181E30; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181B0C; +extern u8 *D_80181B10; +extern u8 *D_80181B14; +extern u8 *D_80181B18; +extern u8 *D_80181B1C; +extern u16 *D_80181B20[]; +extern u16 *D_80181B28[]; +extern u16 *D_80181B48[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181B0C; + iVar2 = func_80028D58(); + puVar3 = D_80181B20[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181B10; + iVar2 = func_80028DE0(); + puVar3 = D_80181B20[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80181B14 + 0x18) = *D_80181B28[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80181B18 + 0x18) = *D_80181B28[iVar2]; + + puVar1 = D_80181B1C; + iVar2 = func_80028D9C(); + puVar3 = D_80181B48[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80181A48; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80181A48); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80181A58; +extern char *D_80181A78; +extern char *D_80181A7C; +extern char *D_80181A80; +extern char *D_80181A84; +extern char *D_80181A88; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80181A58); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80181A78; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A7C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A80; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A84; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A88; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80181912; +extern unsigned short D_80181916; +extern unsigned short D_8018191A; +extern unsigned short D_8018191E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80181912; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80181916; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018191A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018191E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80181EA8[])(void); + +void func_80141788(void) +{ + D_80181EA8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80181EB4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80181EB4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80181E2C; +extern s16 D_80181E2E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181ACC; + extern u8 D_80181AE4; + extern u8 D_80181B58; + extern u8 D_80181B60; + extern void *D_801995D8; + extern void *D_801995DC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801995D8 = &D_80181ACC; + D_801995DC = &D_80181B58; + } else { + D_801995D8 = &D_80181AE4; + D_801995DC = &D_80181B60; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80181E2C = 0xE; + D_80181E2E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80181E30: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80181E30; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80181E30); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80181E08; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80181E08 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80181ED8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80181ED8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80181EE8[])(void); + +void func_801425CC(void *a0) { + D_80181EE8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80181ECC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80181ECC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181EFC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181EFC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181F18[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181F18[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801820E8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801820E8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801821A0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801821A0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80198C7C; +extern u8 D_801995E0; +extern u8 D_801995E1; +extern u8 D_801995E2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80198C7C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801995E0 = mul * (local.b[0] >> 4); + D_801995E1 = mul * (local.b[1] >> 4); + D_801995E2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80181EF0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181EF0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181F0C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181F0C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801820D8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801820D8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801820F8[]; +extern unsigned char D_80182158[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801820F8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80182158); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80198C78; +extern u8 D_801995E0; +extern u8 D_801995E4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80198C78, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801995E0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801995E0, 0x10); + memcpy(&D_801995E4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801822B0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801822B0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801823D8[])(void); + +void func_80143B30(void *a0) { + D_801823D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801823E4[])(void); + +void func_80143C38(void *a0) { + D_801823E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801823EC[])(void); + +void func_80143C98(void *a0) { + D_801823EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80143D28); + + +extern void (*D_80182434[])(void); + +void func_80143E68(void *a0) { + D_80182434[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80182448[])(void); + +void func_80144054(void *a0) { + D_80182448[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80182450[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80182450[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801823CC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801823CC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801823E0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801823E0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801823E0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801823F4; +extern u8 D_80182400; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801823F4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182400); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801823CC; +extern u8 D_8018243C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801823CC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018243C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80182458[])(void); + +void func_801449C8(void *a0) { + D_80182458[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80182460[])(void); + +void func_80144A2C(void *a0) { + D_80182460[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c b/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c index f8f3ad3fd..2011c758b 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80186EEC; -extern u8 *D_80186EF0; -extern u8 *D_80186EF4; -extern u8 *D_80186EF8; -extern u8 *D_80186EFC; -extern u16 *D_80186F00[]; -extern u16 *D_80186F08[]; -extern u16 *D_80186F28[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80186EEC; - iVar2 = func_80028D58(); - puVar3 = D_80186F00[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80186EF0; - iVar2 = func_80028DE0(); - puVar3 = D_80186F00[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80186EF4 + 0x18) = *D_80186F08[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80186EF8 + 0x18) = *D_80186F08[iVar2]; - - puVar1 = D_80186EFC; - iVar2 = func_80028D9C(); - puVar3 = D_80186F28[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80186E28; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80186E28); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80186E38; -extern char *D_80186E58; -extern char *D_80186E5C; -extern char *D_80186E60; -extern char *D_80186E64; -extern char *D_80186E68; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80186E38); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80186E58; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186E5C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186E60; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186E64; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186E68; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80186CF2; -extern unsigned short D_80186CF6; -extern unsigned short D_80186CFA; -extern unsigned short D_80186CFE; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80186CF2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80186CF6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186CFA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186CFE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80187288[])(void); - -void func_80141788(void) -{ - D_80187288[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80187294[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80187294[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018720C; -extern s16 D_8018720E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186EAC; - extern u8 D_80186EC4; - extern u8 D_80186F38; - extern u8 D_80186F40; - extern void *D_801A9660; - extern void *D_801A9664; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A9660 = &D_80186EAC; - D_801A9664 = &D_80186F38; - } else { - D_801A9660 = &D_80186EC4; - D_801A9664 = &D_80186F40; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018720C = 0xE; - D_8018720E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80187210: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80187210; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80187210); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801871E8; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801871E8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801872B8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801872B8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801872C8[])(void); - -void func_801425CC(void *a0) { - D_801872C8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801872AC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801872AC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801872DC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801872DC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801872F8[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801872F8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801874C8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801874C8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187580[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187580[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A8CEC; -extern u8 D_801A9668; -extern u8 D_801A9669; -extern u8 D_801A966A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A8CEC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A9668 = mul * (local.b[0] >> 4); - D_801A9669 = mul * (local.b[1] >> 4); - D_801A966A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801872D0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801872D0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801872EC[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801872EC); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801874B8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801874B8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801874D8[]; -extern unsigned char D_80187538[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801874D8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80187538); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A8CE8; -extern u8 D_801A9668; -extern u8 D_801A966C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A8CE8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A9668); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A9668, 0x10); - memcpy(&D_801A966C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80187690[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80187690[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801877B8[])(void); - -void func_80143B30(void *a0) { - D_801877B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801877C4[])(void); - -void func_80143C38(void *a0) { - D_801877C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801877CC[])(void); - -void func_80143C98(void *a0) { - D_801877CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80143D28); - - -extern void (*D_80187814[])(void); - -void func_80143E68(void *a0) { - D_80187814[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80187828[])(void); - -void func_80144054(void *a0) { - D_80187828[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80187830[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80187830[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801877AC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801877AC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801877C0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801877C0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801877C0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801877D4; -extern u8 D_801877E0; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801877D4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801877E0); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801877AC; -extern u8 D_8018781C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801877AC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018781C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80187838[])(void); - -void func_801449C8(void *a0) { - D_80187838[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80187840[])(void); - -void func_80144A2C(void *a0) { - D_80187840[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_097/ov_SC03_097_jr_80140608.c b/src/ov_SC03_097/ov_SC03_097_jr_80140608.c new file mode 100644 index 000000000..60fb47746 --- /dev/null +++ b/src/ov_SC03_097/ov_SC03_097_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A835C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018612C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A951C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AAE60; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A835C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80185E68)(); +extern s16 (*D_80185E6C)(); +extern M2C_UNK (*D_80185E74)(); +extern s32 (*D_80185E78)(); +extern s32 D_801A9518; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A8360; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801861C0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801896A4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801861D8; +extern M2C_UNK D_801861E0; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801861E8; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80186204[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80186210[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80186224[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80186274[]; +extern s16 D_801862A4[]; +extern s16 D_80186304[]; +extern s16 D_8018630C[]; +extern s16 D_8018632C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80186364[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801863BC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80186404[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018640C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80186414[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018641C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801863C4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801863E4; +extern void func_801321B0(int param_1); +extern int D_801863F4; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A9588; +extern s32 D_801A958C[]; +extern int D_801A9590; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80186428; +extern u8 D_80186424; +extern s16 *D_8018642C; +extern u8 D_80186430; +extern int D_801A9588; +extern u16 D_801A9598; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018642C; /* holds a pointer value (*(u16**)&D_8018642C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186440[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80186494; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186498[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801864DC; +extern u8 D_80186520; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80186564[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801865DC, D_801865DE, D_801865E0, D_801865E2, D_801865E4, D_801865E6; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A9600; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A9604; +extern s8 D_801A9605; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A9624; +extern s32 D_801A9618; +extern s32 D_801A961C; +extern s32 D_801A9628; +extern void func_8013CABC(void); +extern s32 D_801A9620; +extern void func_8013CAE8(void); +extern s32 D_801A9650; +extern s32 D_801A9654; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A9630; +extern s32 D_801A9634; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AAE5A; +extern u8 D_801AAECE; +extern u8 D_801AAD82; +extern u8 D_801AAE3C; +extern u8 D_801AAD60; +extern u8 D_801AAD81; +extern s32 D_801AAE40; +extern void func_8013D330(void); +extern void *D_801A9608; +extern void *D_801A960C; +extern void *D_801A9610; +extern s32 D_801A9638; +extern s32 D_801A963C; +extern s32 D_801A9640; +extern s32 D_801AADB4[]; +extern u8 D_801866D4[]; +extern u8 D_8018677C[]; +extern u8 D_8018662C[]; +extern u8 D_80186728[]; +extern u8 D_801867A8[]; +extern u8 D_80186680[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A9614; +extern s32 D_801A9644; +extern s32 D_801A9648; +extern s32 D_801A964C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A962C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80187234; +extern s32 D_80115188; +extern s16 D_8018720C; +extern s16 D_8018720E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80187210; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80186EEC; +extern u8 *D_80186EF0; +extern u8 *D_80186EF4; +extern u8 *D_80186EF8; +extern u8 *D_80186EFC; +extern u16 *D_80186F00[]; +extern u16 *D_80186F08[]; +extern u16 *D_80186F28[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80186EEC; + iVar2 = func_80028D58(); + puVar3 = D_80186F00[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80186EF0; + iVar2 = func_80028DE0(); + puVar3 = D_80186F00[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80186EF4 + 0x18) = *D_80186F08[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80186EF8 + 0x18) = *D_80186F08[iVar2]; + + puVar1 = D_80186EFC; + iVar2 = func_80028D9C(); + puVar3 = D_80186F28[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80186E28; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80186E28); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80186E38; +extern char *D_80186E58; +extern char *D_80186E5C; +extern char *D_80186E60; +extern char *D_80186E64; +extern char *D_80186E68; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80186E38); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80186E58; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186E5C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186E60; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186E64; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186E68; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80186CF2; +extern unsigned short D_80186CF6; +extern unsigned short D_80186CFA; +extern unsigned short D_80186CFE; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80186CF2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80186CF6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186CFA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186CFE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80187288[])(void); + +void func_80141788(void) +{ + D_80187288[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80187294[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80187294[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018720C; +extern s16 D_8018720E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186EAC; + extern u8 D_80186EC4; + extern u8 D_80186F38; + extern u8 D_80186F40; + extern void *D_801A9660; + extern void *D_801A9664; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A9660 = &D_80186EAC; + D_801A9664 = &D_80186F38; + } else { + D_801A9660 = &D_80186EC4; + D_801A9664 = &D_80186F40; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018720C = 0xE; + D_8018720E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80187210: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80187210; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80187210); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801871E8; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801871E8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801872B8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801872B8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801872C8[])(void); + +void func_801425CC(void *a0) { + D_801872C8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801872AC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801872AC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801872DC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801872DC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801872F8[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801872F8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801874C8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801874C8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187580[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187580[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A8CEC; +extern u8 D_801A9668; +extern u8 D_801A9669; +extern u8 D_801A966A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A8CEC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A9668 = mul * (local.b[0] >> 4); + D_801A9669 = mul * (local.b[1] >> 4); + D_801A966A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801872D0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801872D0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801872EC[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801872EC); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801874B8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801874B8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801874D8[]; +extern unsigned char D_80187538[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801874D8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80187538); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A8CE8; +extern u8 D_801A9668; +extern u8 D_801A966C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A8CE8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A9668); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A9668, 0x10); + memcpy(&D_801A966C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80187690[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80187690[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801877B8[])(void); + +void func_80143B30(void *a0) { + D_801877B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801877C4[])(void); + +void func_80143C38(void *a0) { + D_801877C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801877CC[])(void); + +void func_80143C98(void *a0) { + D_801877CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80143D28); + + +extern void (*D_80187814[])(void); + +void func_80143E68(void *a0) { + D_80187814[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80187828[])(void); + +void func_80144054(void *a0) { + D_80187828[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80187830[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80187830[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801877AC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801877AC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801877C0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801877C0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801877C0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801877D4; +extern u8 D_801877E0; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801877D4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801877E0); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801877AC; +extern u8 D_8018781C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801877AC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018781C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80187838[])(void); + +void func_801449C8(void *a0) { + D_80187838[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80187840[])(void); + +void func_80144A2C(void *a0) { + D_80187840[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c b/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c index 963a72693..9042a5678 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80186378; -extern u8 *D_8018637C; -extern u8 *D_80186380; -extern u8 *D_80186384; -extern u8 *D_80186388; -extern u16 *D_8018638C[]; -extern u16 *D_80186394[]; -extern u16 *D_801863B4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80186378; - iVar2 = func_80028D58(); - puVar3 = D_8018638C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018637C; - iVar2 = func_80028DE0(); - puVar3 = D_8018638C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80186380 + 0x18) = *D_80186394[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80186384 + 0x18) = *D_80186394[iVar2]; - - puVar1 = D_80186388; - iVar2 = func_80028D9C(); - puVar3 = D_801863B4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801862B4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801862B4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801862C4; -extern char *D_801862E4; -extern char *D_801862E8; -extern char *D_801862EC; -extern char *D_801862F0; -extern char *D_801862F4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801862C4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801862E4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801862E8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801862EC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801862F0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801862F4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018617E; -extern unsigned short D_80186182; -extern unsigned short D_80186186; -extern unsigned short D_8018618A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018617E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80186182; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186186; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018618A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186714[])(void); - -void func_80141788(void) -{ - D_80186714[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186720[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186720[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186698; -extern s16 D_8018669A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186338; - extern u8 D_80186350; - extern u8 D_801863C4; - extern u8 D_801863CC; - extern void *D_801C42D0; - extern void *D_801C42D4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C42D0 = &D_80186338; - D_801C42D4 = &D_801863C4; - } else { - D_801C42D0 = &D_80186350; - D_801C42D4 = &D_801863CC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186698 = 0xE; - D_8018669A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018669C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018669C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018669C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186674; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186674 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186744[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186744[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186754[])(void); - -void func_801425CC(void *a0) { - D_80186754[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186738; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186738); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186768[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186768[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186784[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186784[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186954[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186954[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186A0C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186A0C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C3970; -extern u8 D_801C42D8; -extern u8 D_801C42D9; -extern u8 D_801C42DA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C3970; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C42D8 = mul * (local.b[0] >> 4); - D_801C42D9 = mul * (local.b[1] >> 4); - D_801C42DA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018675C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018675C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186778[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186778); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80186944[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80186944[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186964[]; -extern unsigned char D_801869C4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186964); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801869C4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C396C; -extern u8 D_801C42D8; -extern u8 D_801C42DC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C396C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C42D8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C42D8, 0x10); - memcpy(&D_801C42DC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80186B1C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80186B1C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80186C44[])(void); - -void func_80143B30(void *a0) { - D_80186C44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80186C50[])(void); - -void func_80143C38(void *a0) { - D_80186C50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80186C58[])(void); - -void func_80143C98(void *a0) { - D_80186C58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80143D28); - - -extern void (*D_80186CA0[])(void); - -void func_80143E68(void *a0) { - D_80186CA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186CB4[])(void); - -void func_80144054(void *a0) { - D_80186CB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80186CBC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80186CBC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80186C38; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80186C38, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80186C4C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186C4C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186C4C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80186C60; -extern u8 D_80186C6C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186C60); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186C6C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80186C38; -extern u8 D_80186CA8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80186C38, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186CA8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186CC4[])(void); - -void func_801449C8(void *a0) { - D_80186CC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186CCC[])(void); - -void func_80144A2C(void *a0) { - D_80186CCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_098/ov_SC03_098_jr_80140608.c b/src/ov_SC03_098/ov_SC03_098_jr_80140608.c new file mode 100644 index 000000000..3d637e648 --- /dev/null +++ b/src/ov_SC03_098/ov_SC03_098_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C2FE0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801855B8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C418C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C5848; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C2FE0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801852F4)(); +extern s16 (*D_801852F8)(); +extern M2C_UNK (*D_80185300)(); +extern s32 (*D_80185304)(); +extern s32 D_801C4188; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C2FE4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018564C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80188B30; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185664; +extern M2C_UNK D_8018566C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185674; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185690[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018569C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801856B0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185700[]; +extern s16 D_80185730[]; +extern s16 D_80185790[]; +extern s16 D_80185798[]; +extern s16 D_801857B8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801857F0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185848[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185890[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185898[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801858A0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801858A8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80185850; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80185870; +extern void func_801321B0(int param_1); +extern int D_80185880; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C41F8; +extern s32 D_801C41FC[]; +extern int D_801C4200; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801858B4; +extern u8 D_801858B0; +extern s16 *D_801858B8; +extern u8 D_801858BC; +extern int D_801C41F8; +extern u16 D_801C4208; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801858B8; /* holds a pointer value (*(u16**)&D_801858B8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801858CC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185920; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185924[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80185968; +extern u8 D_801859AC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801859F0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185A68, D_80185A6A, D_80185A6C, D_80185A6E, D_80185A70, D_80185A72; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C4270; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C4274; +extern s8 D_801C4275; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C4294; +extern s32 D_801C4288; +extern s32 D_801C428C; +extern s32 D_801C4298; +extern void func_8013CABC(void); +extern s32 D_801C4290; +extern void func_8013CAE8(void); +extern s32 D_801C42C0; +extern s32 D_801C42C4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C42A0; +extern s32 D_801C42A4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C5842; +extern u8 D_801C58B6; +extern u8 D_801C576A; +extern u8 D_801C5824; +extern u8 D_801C5748; +extern u8 D_801C5769; +extern s32 D_801C5828; +extern void func_8013D330(void); +extern void *D_801C4278; +extern void *D_801C427C; +extern void *D_801C4280; +extern s32 D_801C42A8; +extern s32 D_801C42AC; +extern s32 D_801C42B0; +extern s32 D_801C579C[]; +extern u8 D_80185B60[]; +extern u8 D_80185C08[]; +extern u8 D_80185AB8[]; +extern u8 D_80185BB4[]; +extern u8 D_80185C34[]; +extern u8 D_80185B0C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C4284; +extern s32 D_801C42B4; +extern s32 D_801C42B8; +extern s32 D_801C42BC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C429C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801866C0; +extern s32 D_80115188; +extern s16 D_80186698; +extern s16 D_8018669A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018669C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80186378; +extern u8 *D_8018637C; +extern u8 *D_80186380; +extern u8 *D_80186384; +extern u8 *D_80186388; +extern u16 *D_8018638C[]; +extern u16 *D_80186394[]; +extern u16 *D_801863B4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80186378; + iVar2 = func_80028D58(); + puVar3 = D_8018638C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018637C; + iVar2 = func_80028DE0(); + puVar3 = D_8018638C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80186380 + 0x18) = *D_80186394[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80186384 + 0x18) = *D_80186394[iVar2]; + + puVar1 = D_80186388; + iVar2 = func_80028D9C(); + puVar3 = D_801863B4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801862B4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801862B4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801862C4; +extern char *D_801862E4; +extern char *D_801862E8; +extern char *D_801862EC; +extern char *D_801862F0; +extern char *D_801862F4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801862C4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801862E4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801862E8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801862EC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801862F0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801862F4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018617E; +extern unsigned short D_80186182; +extern unsigned short D_80186186; +extern unsigned short D_8018618A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018617E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80186182; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186186; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018618A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186714[])(void); + +void func_80141788(void) +{ + D_80186714[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186720[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186720[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186698; +extern s16 D_8018669A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186338; + extern u8 D_80186350; + extern u8 D_801863C4; + extern u8 D_801863CC; + extern void *D_801C42D0; + extern void *D_801C42D4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C42D0 = &D_80186338; + D_801C42D4 = &D_801863C4; + } else { + D_801C42D0 = &D_80186350; + D_801C42D4 = &D_801863CC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186698 = 0xE; + D_8018669A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018669C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018669C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018669C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186674; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186674 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186744[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186744[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186754[])(void); + +void func_801425CC(void *a0) { + D_80186754[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186738; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186738); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186768[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186768[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186784[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186784[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186954[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186954[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186A0C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186A0C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C3970; +extern u8 D_801C42D8; +extern u8 D_801C42D9; +extern u8 D_801C42DA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C3970; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C42D8 = mul * (local.b[0] >> 4); + D_801C42D9 = mul * (local.b[1] >> 4); + D_801C42DA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018675C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018675C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186778[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186778); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80186944[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80186944[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186964[]; +extern unsigned char D_801869C4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186964); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801869C4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C396C; +extern u8 D_801C42D8; +extern u8 D_801C42DC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C396C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C42D8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C42D8, 0x10); + memcpy(&D_801C42DC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80186B1C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80186B1C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80186C44[])(void); + +void func_80143B30(void *a0) { + D_80186C44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80186C50[])(void); + +void func_80143C38(void *a0) { + D_80186C50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80186C58[])(void); + +void func_80143C98(void *a0) { + D_80186C58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80143D28); + + +extern void (*D_80186CA0[])(void); + +void func_80143E68(void *a0) { + D_80186CA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186CB4[])(void); + +void func_80144054(void *a0) { + D_80186CB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80186CBC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80186CBC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186C38; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80186C38, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80186C4C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186C4C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186C4C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80186C60; +extern u8 D_80186C6C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186C60); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186C6C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80186C38; +extern u8 D_80186CA8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80186C38, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186CA8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186CC4[])(void); + +void func_801449C8(void *a0) { + D_80186CC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186CCC[])(void); + +void func_80144A2C(void *a0) { + D_80186CCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c b/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c index 03a313a95..9b1f9e83c 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80184478; -extern u8 *D_8018447C; -extern u8 *D_80184480; -extern u8 *D_80184484; -extern u8 *D_80184488; -extern u16 *D_8018448C[]; -extern u16 *D_80184494[]; -extern u16 *D_801844B4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80184478; - iVar2 = func_80028D58(); - puVar3 = D_8018448C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018447C; - iVar2 = func_80028DE0(); - puVar3 = D_8018448C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80184480 + 0x18) = *D_80184494[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80184484 + 0x18) = *D_80184494[iVar2]; - - puVar1 = D_80184488; - iVar2 = func_80028D9C(); - puVar3 = D_801844B4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801843B4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801843B4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801843C4; -extern char *D_801843E4; -extern char *D_801843E8; -extern char *D_801843EC; -extern char *D_801843F0; -extern char *D_801843F4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801843C4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801843E4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801843E8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801843EC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801843F0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801843F4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018427E; -extern unsigned short D_80184282; -extern unsigned short D_80184286; -extern unsigned short D_8018428A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018427E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80184282; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80184286; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018428A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80184814[])(void); - -void func_80141788(void) -{ - D_80184814[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80184820[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80184820[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80184798; -extern s16 D_8018479A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80184438; - extern u8 D_80184450; - extern u8 D_801844C4; - extern u8 D_801844CC; - extern void *D_801BDFA0; - extern void *D_801BDFA4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801BDFA0 = &D_80184438; - D_801BDFA4 = &D_801844C4; - } else { - D_801BDFA0 = &D_80184450; - D_801BDFA4 = &D_801844CC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80184798 = 0xE; - D_8018479A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018479C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018479C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018479C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80184774; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80184774 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80184844[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80184844[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80184854[])(void); - -void func_801425CC(void *a0) { - D_80184854[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80184838; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80184838); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184868[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184868[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184884[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184884[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184A54[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184A54[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184B0C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184B0C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801BD644; -extern u8 D_801BDFA8; -extern u8 D_801BDFA9; -extern u8 D_801BDFAA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801BD644; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801BDFA8 = mul * (local.b[0] >> 4); - D_801BDFA9 = mul * (local.b[1] >> 4); - D_801BDFAA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018485C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018485C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184878[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184878); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80184A44[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80184A44[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184A64[]; -extern unsigned char D_80184AC4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184A64); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80184AC4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801BD640; -extern u8 D_801BDFA8; -extern u8 D_801BDFAC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801BD640, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801BDFA8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801BDFA8, 0x10); - memcpy(&D_801BDFAC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80184C1C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80184C1C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80184D44[])(void); - -void func_80143B30(void *a0) { - D_80184D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80184D50[])(void); - -void func_80143C38(void *a0) { - D_80184D50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80184D58[])(void); - -void func_80143C98(void *a0) { - D_80184D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80143D28); - - -extern void (*D_80184DA0[])(void); - -void func_80143E68(void *a0) { - D_80184DA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80184DB4[])(void); - -void func_80144054(void *a0) { - D_80184DB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184DBC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184DBC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80184D38; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80184D38, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80184D4C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184D4C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184D4C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80184D60; -extern u8 D_80184D6C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184D60); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184D6C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80184D38; -extern u8 D_80184DA8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80184D38, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184DA8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80184DC4[])(void); - -void func_801449C8(void *a0) { - D_80184DC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184DCC[])(void); - -void func_80144A2C(void *a0) { - D_80184DCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_099/ov_SC03_099_jr_80140608.c b/src/ov_SC03_099/ov_SC03_099_jr_80140608.c new file mode 100644 index 000000000..8bb015f26 --- /dev/null +++ b/src/ov_SC03_099/ov_SC03_099_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801BCCB4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801836B8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801BDE5C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801BF3F0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801BCCB4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801833F4)(); +extern s16 (*D_801833F8)(); +extern M2C_UNK (*D_80183400)(); +extern s32 (*D_80183404)(); +extern s32 D_801BDE58; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801BCCB8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018374C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80186C30; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80183764; +extern M2C_UNK D_8018376C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80183774; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80183790[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018379C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801837B0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80183800[]; +extern s16 D_80183830[]; +extern s16 D_80183890[]; +extern s16 D_80183898[]; +extern s16 D_801838B8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801838F0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80183948[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80183990[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80183998[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801839A0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801839A8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80183950; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80183970; +extern void func_801321B0(int param_1); +extern int D_80183980; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801BDEC8; +extern s32 D_801BDECC[]; +extern int D_801BDED0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801839B4; +extern u8 D_801839B0; +extern s16 *D_801839B8; +extern u8 D_801839BC; +extern int D_801BDEC8; +extern u16 D_801BDED8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801839B8; /* holds a pointer value (*(u16**)&D_801839B8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801839CC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80183A20; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80183A24[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80183A68; +extern u8 D_80183AAC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183AF0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80183B68, D_80183B6A, D_80183B6C, D_80183B6E, D_80183B70, D_80183B72; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801BDF40; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801BDF44; +extern s8 D_801BDF45; +extern void func_8013C9C4(void * arg0); +extern s32 D_801BDF64; +extern s32 D_801BDF58; +extern s32 D_801BDF5C; +extern s32 D_801BDF68; +extern void func_8013CABC(void); +extern s32 D_801BDF60; +extern void func_8013CAE8(void); +extern s32 D_801BDF90; +extern s32 D_801BDF94; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801BDF70; +extern s32 D_801BDF74; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801BF3EA; +extern u8 D_801BF45E; +extern u8 D_801BF312; +extern u8 D_801BF3CC; +extern u8 D_801BF2F0; +extern u8 D_801BF311; +extern s32 D_801BF3D0; +extern void func_8013D330(void); +extern void *D_801BDF48; +extern void *D_801BDF4C; +extern void *D_801BDF50; +extern s32 D_801BDF78; +extern s32 D_801BDF7C; +extern s32 D_801BDF80; +extern s32 D_801BF344[]; +extern u8 D_80183C60[]; +extern u8 D_80183D08[]; +extern u8 D_80183BB8[]; +extern u8 D_80183CB4[]; +extern u8 D_80183D34[]; +extern u8 D_80183C0C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801BDF54; +extern s32 D_801BDF84; +extern s32 D_801BDF88; +extern s32 D_801BDF8C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801BDF6C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801847C0; +extern s32 D_80115188; +extern s16 D_80184798; +extern s16 D_8018479A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018479C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80184478; +extern u8 *D_8018447C; +extern u8 *D_80184480; +extern u8 *D_80184484; +extern u8 *D_80184488; +extern u16 *D_8018448C[]; +extern u16 *D_80184494[]; +extern u16 *D_801844B4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80184478; + iVar2 = func_80028D58(); + puVar3 = D_8018448C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018447C; + iVar2 = func_80028DE0(); + puVar3 = D_8018448C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80184480 + 0x18) = *D_80184494[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80184484 + 0x18) = *D_80184494[iVar2]; + + puVar1 = D_80184488; + iVar2 = func_80028D9C(); + puVar3 = D_801844B4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801843B4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801843B4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801843C4; +extern char *D_801843E4; +extern char *D_801843E8; +extern char *D_801843EC; +extern char *D_801843F0; +extern char *D_801843F4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801843C4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801843E4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801843E8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801843EC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801843F0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801843F4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018427E; +extern unsigned short D_80184282; +extern unsigned short D_80184286; +extern unsigned short D_8018428A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018427E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80184282; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80184286; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018428A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80184814[])(void); + +void func_80141788(void) +{ + D_80184814[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80184820[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80184820[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80184798; +extern s16 D_8018479A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80184438; + extern u8 D_80184450; + extern u8 D_801844C4; + extern u8 D_801844CC; + extern void *D_801BDFA0; + extern void *D_801BDFA4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801BDFA0 = &D_80184438; + D_801BDFA4 = &D_801844C4; + } else { + D_801BDFA0 = &D_80184450; + D_801BDFA4 = &D_801844CC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80184798 = 0xE; + D_8018479A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018479C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018479C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018479C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80184774; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80184774 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80184844[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80184844[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80184854[])(void); + +void func_801425CC(void *a0) { + D_80184854[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80184838; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80184838); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184868[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184868[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184884[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184884[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184A54[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184A54[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184B0C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184B0C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801BD644; +extern u8 D_801BDFA8; +extern u8 D_801BDFA9; +extern u8 D_801BDFAA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801BD644; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801BDFA8 = mul * (local.b[0] >> 4); + D_801BDFA9 = mul * (local.b[1] >> 4); + D_801BDFAA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018485C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018485C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184878[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184878); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80184A44[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80184A44[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184A64[]; +extern unsigned char D_80184AC4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184A64); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80184AC4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801BD640; +extern u8 D_801BDFA8; +extern u8 D_801BDFAC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801BD640, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801BDFA8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801BDFA8, 0x10); + memcpy(&D_801BDFAC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80184C1C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80184C1C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80184D44[])(void); + +void func_80143B30(void *a0) { + D_80184D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80184D50[])(void); + +void func_80143C38(void *a0) { + D_80184D50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80184D58[])(void); + +void func_80143C98(void *a0) { + D_80184D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80143D28); + + +extern void (*D_80184DA0[])(void); + +void func_80143E68(void *a0) { + D_80184DA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80184DB4[])(void); + +void func_80144054(void *a0) { + D_80184DB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184DBC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184DBC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80184D38; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80184D38, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80184D4C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184D4C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184D4C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80184D60; +extern u8 D_80184D6C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184D60); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184D6C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80184D38; +extern u8 D_80184DA8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80184D38, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184DA8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80184DC4[])(void); + +void func_801449C8(void *a0) { + D_80184DC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184DCC[])(void); + +void func_80144A2C(void *a0) { + D_80184DCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c b/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c index 2d819e630..c6db500d4 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185944; -extern u8 *D_80185948; -extern u8 *D_8018594C; -extern u8 *D_80185950; -extern u8 *D_80185954; -extern u16 *D_80185958[]; -extern u16 *D_80185960[]; -extern u16 *D_80185980[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185944; - iVar2 = func_80028D58(); - puVar3 = D_80185958[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185948; - iVar2 = func_80028DE0(); - puVar3 = D_80185958[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018594C + 0x18) = *D_80185960[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185950 + 0x18) = *D_80185960[iVar2]; - - puVar1 = D_80185954; - iVar2 = func_80028D9C(); - puVar3 = D_80185980[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185880; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185880); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185890; -extern char *D_801858B0; -extern char *D_801858B4; -extern char *D_801858B8; -extern char *D_801858BC; -extern char *D_801858C0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185890); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801858B0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858B4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858B8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858BC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858C0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018574A; -extern unsigned short D_8018574E; -extern unsigned short D_80185752; -extern unsigned short D_80185756; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018574A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018574E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185752; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185756; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80185CE0[])(void); - -void func_80141788(void) -{ - D_80185CE0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80185CEC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80185CEC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80185C64; -extern s16 D_80185C66; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185904; - extern u8 D_8018591C; - extern u8 D_80185990; - extern u8 D_80185998; - extern void *D_801C7228; - extern void *D_801C722C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C7228 = &D_80185904; - D_801C722C = &D_80185990; - } else { - D_801C7228 = &D_8018591C; - D_801C722C = &D_80185998; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80185C64 = 0xE; - D_80185C66 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80185C68: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80185C68; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80185C68); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185C40; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185C40 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80185D10[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80185D10[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80185D20[])(void); - -void func_801425CC(void *a0) { - D_80185D20[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185D04; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185D04); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185D34[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185D34[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185D50[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185D50[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185F20[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185F20[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185FD8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185FD8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C68C8; -extern u8 D_801C7230; -extern u8 D_801C7231; -extern u8 D_801C7232; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C68C8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C7230 = mul * (local.b[0] >> 4); - D_801C7231 = mul * (local.b[1] >> 4); - D_801C7232 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80185D28; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185D28); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185D44[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185D44); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185F10[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185F10[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185F30[]; -extern unsigned char D_80185F90[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185F30); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185F90); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C68C4; -extern u8 D_801C7230; -extern u8 D_801C7234; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C68C4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C7230); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C7230, 0x10); - memcpy(&D_801C7234, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801860E8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801860E8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80186210[])(void); - -void func_80143B30(void *a0) { - D_80186210[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018621C[])(void); - -void func_80143C38(void *a0) { - D_8018621C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80186224[])(void); - -void func_80143C98(void *a0) { - D_80186224[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018626C[])(void); - -void func_80143E68(void *a0) { - D_8018626C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186280[])(void); - -void func_80144054(void *a0) { - D_80186280[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80186288[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80186288[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80186204; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80186204, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80186218; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186218 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186218 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018622C; -extern u8 D_80186238; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018622C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186238); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80186204; -extern u8 D_80186274; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80186204, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186274, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186290[])(void); - -void func_801449C8(void *a0) { - D_80186290[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186298[])(void); - -void func_80144A2C(void *a0) { - D_80186298[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_100/ov_SC03_100_jr_80140608.c b/src/ov_SC03_100/ov_SC03_100_jr_80140608.c new file mode 100644 index 000000000..289a90d00 --- /dev/null +++ b/src/ov_SC03_100/ov_SC03_100_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C5F38; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184B84[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C70E4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C88F8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C5F38; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801848C0)(); +extern s16 (*D_801848C4)(); +extern M2C_UNK (*D_801848CC)(); +extern s32 (*D_801848D0)(); +extern s32 D_801C70E0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C5F3C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80184C18; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801880FC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184C30; +extern M2C_UNK D_80184C38; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184C40; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80184C5C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80184C68[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80184C7C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80184CCC[]; +extern s16 D_80184CFC[]; +extern s16 D_80184D5C[]; +extern s16 D_80184D64[]; +extern s16 D_80184D84[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80184DBC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80184E14[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80184E5C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80184E64[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80184E6C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184E74[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80184E1C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80184E3C; +extern void func_801321B0(int param_1); +extern int D_80184E4C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C7150; +extern s32 D_801C7154[]; +extern int D_801C7158; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184E80; +extern u8 D_80184E7C; +extern s16 *D_80184E84; +extern u8 D_80184E88; +extern int D_801C7150; +extern u16 D_801C7160; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184E84; /* holds a pointer value (*(u16**)&D_80184E84) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80184E98[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184EEC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184EF0[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184F34; +extern u8 D_80184F78; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184FBC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185034, D_80185036, D_80185038, D_8018503A, D_8018503C, D_8018503E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C71C8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C71CC; +extern s8 D_801C71CD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C71EC; +extern s32 D_801C71E0; +extern s32 D_801C71E4; +extern s32 D_801C71F0; +extern void func_8013CABC(void); +extern s32 D_801C71E8; +extern void func_8013CAE8(void); +extern s32 D_801C7218; +extern s32 D_801C721C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C71F8; +extern s32 D_801C71FC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C88F2; +extern u8 D_801C8966; +extern u8 D_801C881A; +extern u8 D_801C88D4; +extern u8 D_801C87F8; +extern u8 D_801C8819; +extern s32 D_801C88D8; +extern void func_8013D330(void); +extern void *D_801C71D0; +extern void *D_801C71D4; +extern void *D_801C71D8; +extern s32 D_801C7200; +extern s32 D_801C7204; +extern s32 D_801C7208; +extern s32 D_801C884C[]; +extern u8 D_8018512C[]; +extern u8 D_801851D4[]; +extern u8 D_80185084[]; +extern u8 D_80185180[]; +extern u8 D_80185200[]; +extern u8 D_801850D8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C71DC; +extern s32 D_801C720C; +extern s32 D_801C7210; +extern s32 D_801C7214; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C71F4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80185C8C; +extern s32 D_80115188; +extern s16 D_80185C64; +extern s16 D_80185C66; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80185C68; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185944; +extern u8 *D_80185948; +extern u8 *D_8018594C; +extern u8 *D_80185950; +extern u8 *D_80185954; +extern u16 *D_80185958[]; +extern u16 *D_80185960[]; +extern u16 *D_80185980[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185944; + iVar2 = func_80028D58(); + puVar3 = D_80185958[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185948; + iVar2 = func_80028DE0(); + puVar3 = D_80185958[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018594C + 0x18) = *D_80185960[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185950 + 0x18) = *D_80185960[iVar2]; + + puVar1 = D_80185954; + iVar2 = func_80028D9C(); + puVar3 = D_80185980[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185880; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185880); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185890; +extern char *D_801858B0; +extern char *D_801858B4; +extern char *D_801858B8; +extern char *D_801858BC; +extern char *D_801858C0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185890); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801858B0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858B4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858B8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858BC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858C0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018574A; +extern unsigned short D_8018574E; +extern unsigned short D_80185752; +extern unsigned short D_80185756; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018574A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018574E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185752; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185756; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80185CE0[])(void); + +void func_80141788(void) +{ + D_80185CE0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80185CEC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80185CEC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80185C64; +extern s16 D_80185C66; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185904; + extern u8 D_8018591C; + extern u8 D_80185990; + extern u8 D_80185998; + extern void *D_801C7228; + extern void *D_801C722C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C7228 = &D_80185904; + D_801C722C = &D_80185990; + } else { + D_801C7228 = &D_8018591C; + D_801C722C = &D_80185998; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80185C64 = 0xE; + D_80185C66 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80185C68: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80185C68; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80185C68); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185C40; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185C40 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80185D10[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80185D10[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80185D20[])(void); + +void func_801425CC(void *a0) { + D_80185D20[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185D04; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185D04); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185D34[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185D34[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185D50[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185D50[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185F20[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185F20[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185FD8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185FD8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C68C8; +extern u8 D_801C7230; +extern u8 D_801C7231; +extern u8 D_801C7232; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C68C8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C7230 = mul * (local.b[0] >> 4); + D_801C7231 = mul * (local.b[1] >> 4); + D_801C7232 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80185D28; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185D28); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185D44[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185D44); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185F10[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185F10[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185F30[]; +extern unsigned char D_80185F90[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185F30); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185F90); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C68C4; +extern u8 D_801C7230; +extern u8 D_801C7234; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C68C4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C7230); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C7230, 0x10); + memcpy(&D_801C7234, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801860E8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801860E8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80186210[])(void); + +void func_80143B30(void *a0) { + D_80186210[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018621C[])(void); + +void func_80143C38(void *a0) { + D_8018621C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80186224[])(void); + +void func_80143C98(void *a0) { + D_80186224[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80143D28); + + +extern void (*D_8018626C[])(void); + +void func_80143E68(void *a0) { + D_8018626C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186280[])(void); + +void func_80144054(void *a0) { + D_80186280[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80186288[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80186288[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186204; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80186204, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80186218; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186218 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186218 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018622C; +extern u8 D_80186238; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018622C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186238); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80186204; +extern u8 D_80186274; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80186204, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186274, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186290[])(void); + +void func_801449C8(void *a0) { + D_80186290[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186298[])(void); + +void func_80144A2C(void *a0) { + D_80186298[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c b/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c index 96e6ba3f2..7d5d4f6ab 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80184920; -extern u8 *D_80184924; -extern u8 *D_80184928; -extern u8 *D_8018492C; -extern u8 *D_80184930; -extern u16 *D_80184934[]; -extern u16 *D_8018493C[]; -extern u16 *D_8018495C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80184920; - iVar2 = func_80028D58(); - puVar3 = D_80184934[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80184924; - iVar2 = func_80028DE0(); - puVar3 = D_80184934[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80184928 + 0x18) = *D_8018493C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018492C + 0x18) = *D_8018493C[iVar2]; - - puVar1 = D_80184930; - iVar2 = func_80028D9C(); - puVar3 = D_8018495C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018485C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018485C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018486C; -extern char *D_8018488C; -extern char *D_80184890; -extern char *D_80184894; -extern char *D_80184898; -extern char *D_8018489C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018486C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018488C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184890; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184894; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184898; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018489C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80184726; -extern unsigned short D_8018472A; -extern unsigned short D_8018472E; -extern unsigned short D_80184732; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80184726; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018472A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018472E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80184732; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80184CBC[])(void); - -void func_80141788(void) -{ - D_80184CBC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80184CC8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80184CC8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80184C40; -extern s16 D_80184C42; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801848E0; - extern u8 D_801848F8; - extern u8 D_8018496C; - extern u8 D_80184974; - extern void *D_8019CAF0; - extern void *D_8019CAF4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019CAF0 = &D_801848E0; - D_8019CAF4 = &D_8018496C; - } else { - D_8019CAF0 = &D_801848F8; - D_8019CAF4 = &D_80184974; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80184C40 = 0xE; - D_80184C42 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80184C44: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80184C44; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80184C44); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80184C1C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80184C1C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80184CEC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80184CEC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80184CFC[])(void); - -void func_801425CC(void *a0) { - D_80184CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80184CE0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80184CE0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184D10[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184D10[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184D2C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184D2C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184EFC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184EFC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184FB4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184FB4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019C190; -extern u8 D_8019CAF8; -extern u8 D_8019CAF9; -extern u8 D_8019CAFA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019C190; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019CAF8 = mul * (local.b[0] >> 4); - D_8019CAF9 = mul * (local.b[1] >> 4); - D_8019CAFA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80184D04; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184D04); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184D20[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184D20); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80184EEC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80184EEC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184F0C[]; -extern unsigned char D_80184F6C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184F0C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80184F6C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019C18C; -extern u8 D_8019CAF8; -extern u8 D_8019CAFC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019C18C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019CAF8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019CAF8, 0x10); - memcpy(&D_8019CAFC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801850C4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801850C4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801851EC[])(void); - -void func_80143B30(void *a0) { - D_801851EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801851F8[])(void); - -void func_80143C38(void *a0) { - D_801851F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80185200[])(void); - -void func_80143C98(void *a0) { - D_80185200[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80143D28); - - -extern void (*D_80185248[])(void); - -void func_80143E68(void *a0) { - D_80185248[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018525C[])(void); - -void func_80144054(void *a0) { - D_8018525C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80185264[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80185264[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801851E0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801851E0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801851F4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801851F4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801851F4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80185208; -extern u8 D_80185214; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185208); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185214); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801851E0; -extern u8 D_80185250; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801851E0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80185250, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018526C[])(void); - -void func_801449C8(void *a0) { - D_8018526C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80185274[])(void); - -void func_80144A2C(void *a0) { - D_80185274[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_101/ov_SC03_101_jr_80140608.c b/src/ov_SC03_101/ov_SC03_101_jr_80140608.c new file mode 100644 index 000000000..a29939413 --- /dev/null +++ b/src/ov_SC03_101/ov_SC03_101_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019B800; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80183B60[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019C9AC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019E1B8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019B800; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018389C)(); +extern s16 (*D_801838A0)(); +extern M2C_UNK (*D_801838A8)(); +extern s32 (*D_801838AC)(); +extern s32 D_8019C9A8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019B804; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80183BF4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801870D8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80183C0C; +extern M2C_UNK D_80183C14; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80183C1C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80183C38[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80183C44[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80183C58[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80183CA8[]; +extern s16 D_80183CD8[]; +extern s16 D_80183D38[]; +extern s16 D_80183D40[]; +extern s16 D_80183D60[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80183D98[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80183DF0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80183E38[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80183E40[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80183E48[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80183E50[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80183DF8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80183E18; +extern void func_801321B0(int param_1); +extern int D_80183E28; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019CA18; +extern s32 D_8019CA1C[]; +extern int D_8019CA20; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80183E5C; +extern u8 D_80183E58; +extern s16 *D_80183E60; +extern u8 D_80183E64; +extern int D_8019CA18; +extern u16 D_8019CA28; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80183E60; /* holds a pointer value (*(u16**)&D_80183E60) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80183E74[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80183EC8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80183ECC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80183F10; +extern u8 D_80183F54; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183F98[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80184010, D_80184012, D_80184014, D_80184016, D_80184018, D_8018401A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019CA90; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019CA94; +extern s8 D_8019CA95; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019CAB4; +extern s32 D_8019CAA8; +extern s32 D_8019CAAC; +extern s32 D_8019CAB8; +extern void func_8013CABC(void); +extern s32 D_8019CAB0; +extern void func_8013CAE8(void); +extern s32 D_8019CAE0; +extern s32 D_8019CAE4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019CAC0; +extern s32 D_8019CAC4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019E1B2; +extern u8 D_8019E226; +extern u8 D_8019E0DA; +extern u8 D_8019E194; +extern u8 D_8019E0B8; +extern u8 D_8019E0D9; +extern s32 D_8019E198; +extern void func_8013D330(void); +extern void *D_8019CA98; +extern void *D_8019CA9C; +extern void *D_8019CAA0; +extern s32 D_8019CAC8; +extern s32 D_8019CACC; +extern s32 D_8019CAD0; +extern s32 D_8019E10C[]; +extern u8 D_80184108[]; +extern u8 D_801841B0[]; +extern u8 D_80184060[]; +extern u8 D_8018415C[]; +extern u8 D_801841DC[]; +extern u8 D_801840B4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019CAA4; +extern s32 D_8019CAD4; +extern s32 D_8019CAD8; +extern s32 D_8019CADC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019CABC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80184C68; +extern s32 D_80115188; +extern s16 D_80184C40; +extern s16 D_80184C42; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80184C44; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80184920; +extern u8 *D_80184924; +extern u8 *D_80184928; +extern u8 *D_8018492C; +extern u8 *D_80184930; +extern u16 *D_80184934[]; +extern u16 *D_8018493C[]; +extern u16 *D_8018495C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80184920; + iVar2 = func_80028D58(); + puVar3 = D_80184934[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80184924; + iVar2 = func_80028DE0(); + puVar3 = D_80184934[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80184928 + 0x18) = *D_8018493C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018492C + 0x18) = *D_8018493C[iVar2]; + + puVar1 = D_80184930; + iVar2 = func_80028D9C(); + puVar3 = D_8018495C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018485C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018485C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018486C; +extern char *D_8018488C; +extern char *D_80184890; +extern char *D_80184894; +extern char *D_80184898; +extern char *D_8018489C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018486C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018488C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184890; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184894; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184898; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018489C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80184726; +extern unsigned short D_8018472A; +extern unsigned short D_8018472E; +extern unsigned short D_80184732; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80184726; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018472A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018472E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80184732; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80184CBC[])(void); + +void func_80141788(void) +{ + D_80184CBC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80184CC8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80184CC8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80184C40; +extern s16 D_80184C42; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801848E0; + extern u8 D_801848F8; + extern u8 D_8018496C; + extern u8 D_80184974; + extern void *D_8019CAF0; + extern void *D_8019CAF4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019CAF0 = &D_801848E0; + D_8019CAF4 = &D_8018496C; + } else { + D_8019CAF0 = &D_801848F8; + D_8019CAF4 = &D_80184974; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80184C40 = 0xE; + D_80184C42 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80184C44: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80184C44; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80184C44); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80184C1C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80184C1C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80184CEC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80184CEC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80184CFC[])(void); + +void func_801425CC(void *a0) { + D_80184CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80184CE0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80184CE0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184D10[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184D10[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184D2C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184D2C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184EFC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184EFC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184FB4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184FB4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019C190; +extern u8 D_8019CAF8; +extern u8 D_8019CAF9; +extern u8 D_8019CAFA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019C190; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019CAF8 = mul * (local.b[0] >> 4); + D_8019CAF9 = mul * (local.b[1] >> 4); + D_8019CAFA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80184D04; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184D04); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184D20[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184D20); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80184EEC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80184EEC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184F0C[]; +extern unsigned char D_80184F6C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184F0C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80184F6C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019C18C; +extern u8 D_8019CAF8; +extern u8 D_8019CAFC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019C18C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019CAF8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019CAF8, 0x10); + memcpy(&D_8019CAFC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801850C4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801850C4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801851EC[])(void); + +void func_80143B30(void *a0) { + D_801851EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801851F8[])(void); + +void func_80143C38(void *a0) { + D_801851F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80185200[])(void); + +void func_80143C98(void *a0) { + D_80185200[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80143D28); + + +extern void (*D_80185248[])(void); + +void func_80143E68(void *a0) { + D_80185248[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018525C[])(void); + +void func_80144054(void *a0) { + D_8018525C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80185264[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80185264[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801851E0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801851E0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801851F4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801851F4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801851F4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80185208; +extern u8 D_80185214; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185208); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185214); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801851E0; +extern u8 D_80185250; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801851E0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80185250, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018526C[])(void); + +void func_801449C8(void *a0) { + D_8018526C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80185274[])(void); + +void func_80144A2C(void *a0) { + D_80185274[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c b/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c index 630cd5e7f..c5d345400 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801871D8; -extern u8 *D_801871DC; -extern u8 *D_801871E0; -extern u8 *D_801871E4; -extern u8 *D_801871E8; -extern u16 *D_801871EC[]; -extern u16 *D_801871F4[]; -extern u16 *D_80187214[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801871D8; - iVar2 = func_80028D58(); - puVar3 = D_801871EC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801871DC; - iVar2 = func_80028DE0(); - puVar3 = D_801871EC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801871E0 + 0x18) = *D_801871F4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801871E4 + 0x18) = *D_801871F4[iVar2]; - - puVar1 = D_801871E8; - iVar2 = func_80028D9C(); - puVar3 = D_80187214[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80187114; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80187114); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80187124; -extern char *D_80187144; -extern char *D_80187148; -extern char *D_8018714C; -extern char *D_80187150; -extern char *D_80187154; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80187124); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80187144; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187148; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018714C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187150; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187154; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80186FDE; -extern unsigned short D_80186FE2; -extern unsigned short D_80186FE6; -extern unsigned short D_80186FEA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80186FDE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80186FE2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186FE6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186FEA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80187574[])(void); - -void func_80141788(void) -{ - D_80187574[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80187580[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80187580[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801874F8; -extern s16 D_801874FA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80187198; - extern u8 D_801871B0; - extern u8 D_80187224; - extern u8 D_8018722C; - extern void *D_801B8768; - extern void *D_801B876C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B8768 = &D_80187198; - D_801B876C = &D_80187224; - } else { - D_801B8768 = &D_801871B0; - D_801B876C = &D_8018722C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801874F8 = 0xE; - D_801874FA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801874FC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801874FC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801874FC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801874D4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801874D4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801875A4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801875A4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801875B4[])(void); - -void func_801425CC(void *a0) { - D_801875B4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80187598; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80187598); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801875C8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801875C8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801875E4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801875E4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801877B4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801877B4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018786C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018786C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B7E0C; -extern u8 D_801B8770; -extern u8 D_801B8771; -extern u8 D_801B8772; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B7E0C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B8770 = mul * (local.b[0] >> 4); - D_801B8771 = mul * (local.b[1] >> 4); - D_801B8772 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801875BC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801875BC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801875D8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801875D8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801877A4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801877A4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801877C4[]; -extern unsigned char D_80187824[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801877C4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80187824); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B7E08; -extern u8 D_801B8770; -extern u8 D_801B8774; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B7E08, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8770); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B8770, 0x10); - memcpy(&D_801B8774, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018797C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018797C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80187AA4[])(void); - -void func_80143B30(void *a0) { - D_80187AA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80187AB0[])(void); - -void func_80143C38(void *a0) { - D_80187AB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80187AB8[])(void); - -void func_80143C98(void *a0) { - D_80187AB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80143D28); - - -extern void (*D_80187B00[])(void); - -void func_80143E68(void *a0) { - D_80187B00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80187B14[])(void); - -void func_80144054(void *a0) { - D_80187B14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80187B1C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80187B1C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80187A98; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80187A98, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80187AAC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187AAC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187AAC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80187AC0; -extern u8 D_80187ACC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187AC0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187ACC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80187A98; -extern u8 D_80187B08; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80187A98, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80187B08, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80187B24[])(void); - -void func_801449C8(void *a0) { - D_80187B24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80187B2C[])(void); - -void func_80144A2C(void *a0) { - D_80187B2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_102/ov_SC03_102_jr_80140608.c b/src/ov_SC03_102/ov_SC03_102_jr_80140608.c new file mode 100644 index 000000000..3a64569ef --- /dev/null +++ b/src/ov_SC03_102/ov_SC03_102_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B747C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80186418[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B8624; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B9BB8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B747C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80186154)(); +extern s16 (*D_80186158)(); +extern M2C_UNK (*D_80186160)(); +extern s32 (*D_80186164)(); +extern s32 D_801B8620; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B7480; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801864AC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80189990; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801864C4; +extern M2C_UNK D_801864CC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801864D4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801864F0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801864FC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80186510[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80186560[]; +extern s16 D_80186590[]; +extern s16 D_801865F0[]; +extern s16 D_801865F8[]; +extern s16 D_80186618[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80186650[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801866A8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801866F0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801866F8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80186700[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80186708[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801866B0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801866D0; +extern void func_801321B0(int param_1); +extern int D_801866E0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B8690; +extern s32 D_801B8694[]; +extern int D_801B8698; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80186714; +extern u8 D_80186710; +extern s16 *D_80186718; +extern u8 D_8018671C; +extern int D_801B8690; +extern u16 D_801B86A0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186718; /* holds a pointer value (*(u16**)&D_80186718) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018672C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80186780; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186784[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801867C8; +extern u8 D_8018680C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80186850[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801868C8, D_801868CA, D_801868CC, D_801868CE, D_801868D0, D_801868D2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B8708; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B870C; +extern s8 D_801B870D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B872C; +extern s32 D_801B8720; +extern s32 D_801B8724; +extern s32 D_801B8730; +extern void func_8013CABC(void); +extern s32 D_801B8728; +extern void func_8013CAE8(void); +extern s32 D_801B8758; +extern s32 D_801B875C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B8738; +extern s32 D_801B873C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B9BB2; +extern u8 D_801B9C26; +extern u8 D_801B9ADA; +extern u8 D_801B9B94; +extern u8 D_801B9AB8; +extern u8 D_801B9AD9; +extern s32 D_801B9B98; +extern void func_8013D330(void); +extern void *D_801B8710; +extern void *D_801B8714; +extern void *D_801B8718; +extern s32 D_801B8740; +extern s32 D_801B8744; +extern s32 D_801B8748; +extern s32 D_801B9B0C[]; +extern u8 D_801869C0[]; +extern u8 D_80186A68[]; +extern u8 D_80186918[]; +extern u8 D_80186A14[]; +extern u8 D_80186A94[]; +extern u8 D_8018696C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B871C; +extern s32 D_801B874C; +extern s32 D_801B8750; +extern s32 D_801B8754; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B8734; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80187520; +extern s32 D_80115188; +extern s16 D_801874F8; +extern s16 D_801874FA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801874FC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801871D8; +extern u8 *D_801871DC; +extern u8 *D_801871E0; +extern u8 *D_801871E4; +extern u8 *D_801871E8; +extern u16 *D_801871EC[]; +extern u16 *D_801871F4[]; +extern u16 *D_80187214[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801871D8; + iVar2 = func_80028D58(); + puVar3 = D_801871EC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801871DC; + iVar2 = func_80028DE0(); + puVar3 = D_801871EC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801871E0 + 0x18) = *D_801871F4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801871E4 + 0x18) = *D_801871F4[iVar2]; + + puVar1 = D_801871E8; + iVar2 = func_80028D9C(); + puVar3 = D_80187214[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80187114; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80187114); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80187124; +extern char *D_80187144; +extern char *D_80187148; +extern char *D_8018714C; +extern char *D_80187150; +extern char *D_80187154; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80187124); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80187144; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187148; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018714C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187150; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187154; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80186FDE; +extern unsigned short D_80186FE2; +extern unsigned short D_80186FE6; +extern unsigned short D_80186FEA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80186FDE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80186FE2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186FE6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186FEA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80187574[])(void); + +void func_80141788(void) +{ + D_80187574[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80187580[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80187580[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801874F8; +extern s16 D_801874FA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80187198; + extern u8 D_801871B0; + extern u8 D_80187224; + extern u8 D_8018722C; + extern void *D_801B8768; + extern void *D_801B876C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B8768 = &D_80187198; + D_801B876C = &D_80187224; + } else { + D_801B8768 = &D_801871B0; + D_801B876C = &D_8018722C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801874F8 = 0xE; + D_801874FA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801874FC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801874FC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801874FC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801874D4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801874D4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801875A4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801875A4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801875B4[])(void); + +void func_801425CC(void *a0) { + D_801875B4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80187598; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80187598); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801875C8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801875C8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801875E4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801875E4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801877B4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801877B4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018786C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018786C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B7E0C; +extern u8 D_801B8770; +extern u8 D_801B8771; +extern u8 D_801B8772; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B7E0C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B8770 = mul * (local.b[0] >> 4); + D_801B8771 = mul * (local.b[1] >> 4); + D_801B8772 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801875BC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801875BC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801875D8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801875D8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801877A4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801877A4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801877C4[]; +extern unsigned char D_80187824[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801877C4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80187824); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B7E08; +extern u8 D_801B8770; +extern u8 D_801B8774; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B7E08, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8770); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B8770, 0x10); + memcpy(&D_801B8774, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018797C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018797C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80187AA4[])(void); + +void func_80143B30(void *a0) { + D_80187AA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80187AB0[])(void); + +void func_80143C38(void *a0) { + D_80187AB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80187AB8[])(void); + +void func_80143C98(void *a0) { + D_80187AB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80143D28); + + +extern void (*D_80187B00[])(void); + +void func_80143E68(void *a0) { + D_80187B00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80187B14[])(void); + +void func_80144054(void *a0) { + D_80187B14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80187B1C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80187B1C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187A98; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80187A98, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80187AAC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187AAC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187AAC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80187AC0; +extern u8 D_80187ACC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187AC0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187ACC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80187A98; +extern u8 D_80187B08; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80187A98, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80187B08, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80187B24[])(void); + +void func_801449C8(void *a0) { + D_80187B24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80187B2C[])(void); + +void func_80144A2C(void *a0) { + D_80187B2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c b/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c index 42c1e20ce..dc84c8c15 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c @@ -1399,1168 +1399,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185188; -extern u8 *D_8018518C; -extern u8 *D_80185190; -extern u8 *D_80185194; -extern u8 *D_80185198; -extern u16 *D_8018519C[]; -extern u16 *D_801851A4[]; -extern u16 *D_801851C4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185188; - iVar2 = func_80028D58(); - puVar3 = D_8018519C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018518C; - iVar2 = func_80028DE0(); - puVar3 = D_8018519C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185190 + 0x18) = *D_801851A4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185194 + 0x18) = *D_801851A4[iVar2]; - - puVar1 = D_80185198; - iVar2 = func_80028D9C(); - puVar3 = D_801851C4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801850C4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801850C4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801850D4; -extern char *D_801850F4; -extern char *D_801850F8; -extern char *D_801850FC; -extern char *D_80185100; -extern char *D_80185104; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801850D4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801850F4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801850F8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801850FC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185100; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185104; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80184F8E; -extern unsigned short D_80184F92; -extern unsigned short D_80184F96; -extern unsigned short D_80184F9A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80184F8E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80184F92; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80184F96; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80184F9A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80185524[])(void); - -void func_80141788(void) -{ - D_80185524[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80185530[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80185530[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; -extern s16 D_801854A8; -extern s16 D_801854AA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185148; - extern u8 D_80185160; - extern u8 D_801851D4; - extern u8 D_801851DC; - extern void *D_801C3920; - extern void *D_801C3924; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C3920 = &D_80185148; - D_801C3924 = &D_801851D4; - } else { - D_801C3920 = &D_80185160; - D_801C3924 = &D_801851DC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801854A8 = 0xE; - D_801854AA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801854AC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u8 D_801854AC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801854AC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185484; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185484 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80185554[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80185554[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80185564[])(void); - -void func_801425CC(void *a0) { - D_80185564[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185548; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185548); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185578[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185578[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185594[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185594[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185764[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185764[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018581C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018581C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C2FC0; -extern u8 D_801C3928; -extern u8 D_801C3929; -extern u8 D_801C392A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C2FC0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C3928 = mul * (local.b[0] >> 4); - D_801C3929 = mul * (local.b[1] >> 4); - D_801C392A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018556C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018556C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185588[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185588); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185754[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185754[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185774[]; -extern unsigned char D_801857D4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185774); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801857D4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C2FBC; -extern u8 D_801C3928; -extern u8 D_801C392C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C2FBC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C3928); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C3928, 0x10); - memcpy(&D_801C392C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018592C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018592C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80185A54[])(void); - -void func_80143B30(void *a0) { - D_80185A54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80185A60[])(void); - -void func_80143C38(void *a0) { - D_80185A60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80185A68[])(void); - -void func_80143C98(void *a0) { - D_80185A68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80143D28); - - -extern void (*D_80185AB0[])(void); - -void func_80143E68(void *a0) { - D_80185AB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80185AC4[])(void); - -void func_80144054(void *a0) { - D_80185AC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80185ACC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80185ACC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80185A48; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80185A48, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80185A5C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185A5C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185A5C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80185A70; -extern u8 D_80185A7C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185A70); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185A7C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80185A48; -extern u8 D_80185AB8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80185A48, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80185AB8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80185AD4[])(void); - -void func_801449C8(void *a0) { - D_80185AD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80185ADC[])(void); - -void func_80144A2C(void *a0) { - D_80185ADC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8013F350", func_80144B14); - - diff --git a/src/ov_SC03_103/ov_SC03_103_jr_80140608.c b/src/ov_SC03_103/ov_SC03_103_jr_80140608.c new file mode 100644 index 000000000..117270488 --- /dev/null +++ b/src/ov_SC03_103/ov_SC03_103_jr_80140608.c @@ -0,0 +1,2248 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C2630; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801843C8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C37DC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C4D68; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C2630; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184104)(); +extern s16 (*D_80184108)(); +extern M2C_UNK (*D_80184110)(); +extern s32 (*D_80184114)(); +extern s32 D_801C37D8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C2634; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018445C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80187940; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184474; +extern M2C_UNK D_8018447C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184484; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801844A0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801844AC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801844C0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80184510[]; +extern s16 D_80184540[]; +extern s16 D_801845A0[]; +extern s16 D_801845A8[]; +extern s16 D_801845C8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80184600[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80184658[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801846A0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801846A8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801846B0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801846B8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80184660; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80184680; +extern void func_801321B0(int param_1); +extern int D_80184690; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C3848; +extern s32 D_801C384C[]; +extern int D_801C3850; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801846C4; +extern u8 D_801846C0; +extern s16 *D_801846C8; +extern u8 D_801846CC; +extern int D_801C3848; +extern u16 D_801C3858; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801846C8; /* holds a pointer value (*(u16**)&D_801846C8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801846DC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184730; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_801380E0(s32 arg0); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184734[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184778; +extern u8 D_801847BC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184800[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80184878, D_8018487A, D_8018487C, D_8018487E, D_80184880, D_80184882; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C38C0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C38C4; +extern s8 D_801C38C5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C38E4; +extern s32 D_801C38D8; +extern s32 D_801C38DC; +extern s32 D_801C38E8; +extern void func_8013CABC(void); +extern s32 D_801C38E0; +extern void func_8013CAE8(void); +extern s32 D_801C3910; +extern s32 D_801C3914; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C38F0; +extern s32 D_801C38F4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern u8 D_801C4D62; +extern u8 D_801C4DD6; +extern u8 D_801C4C8A; +extern u8 D_801C4D44; +extern u8 D_801C4C68; +extern u8 D_801C4C89; +extern s32 D_801C4D48; +extern void func_8013D330(void); +extern void *D_801C38C8; +extern void *D_801C38CC; +extern void *D_801C38D0; +extern s32 D_801C38F8; +extern s32 D_801C38FC; +extern s32 D_801C3900; +extern s32 D_801C4CBC[]; +extern u8 D_80184970[]; +extern u8 D_80184A18[]; +extern u8 D_801848C8[]; +extern u8 D_801849C4[]; +extern u8 D_80184A44[]; +extern u8 D_8018491C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C38D4; +extern s32 D_801C3904; +extern s32 D_801C3908; +extern s32 D_801C390C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C38EC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801854D0; +extern s32 D_80115188; +extern s16 D_801854A8; +extern s16 D_801854AA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801854AC; +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern u16 D_8011512E; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_801851CC[]; +extern u8 D_801851E4[]; +extern u16 D_801850E8[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185188; +extern u8 *D_8018518C; +extern u8 *D_80185190; +extern u8 *D_80185194; +extern u8 *D_80185198; +extern u16 *D_8018519C[]; +extern u16 *D_801851A4[]; +extern u16 *D_801851C4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185188; + iVar2 = func_80028D58(); + puVar3 = D_8018519C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018518C; + iVar2 = func_80028DE0(); + puVar3 = D_8018519C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185190 + 0x18) = *D_801851A4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185194 + 0x18) = *D_801851A4[iVar2]; + + puVar1 = D_80185198; + iVar2 = func_80028D9C(); + puVar3 = D_801851C4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801850C4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801850C4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801850D4; +extern char *D_801850F4; +extern char *D_801850F8; +extern char *D_801850FC; +extern char *D_80185100; +extern char *D_80185104; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801850D4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801850F4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801850F8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801850FC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185100; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185104; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80184F8E; +extern unsigned short D_80184F92; +extern unsigned short D_80184F96; +extern unsigned short D_80184F9A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80184F8E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80184F92; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80184F96; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80184F9A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80185524[])(void); + +void func_80141788(void) +{ + D_80185524[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80185530[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80185530[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; +extern s16 D_801854A8; +extern s16 D_801854AA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185148; + extern u8 D_80185160; + extern u8 D_801851D4; + extern u8 D_801851DC; + extern void *D_801C3920; + extern void *D_801C3924; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C3920 = &D_80185148; + D_801C3924 = &D_801851D4; + } else { + D_801C3920 = &D_80185160; + D_801C3924 = &D_801851DC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801854A8 = 0xE; + D_801854AA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801854AC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u8 D_801854AC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801854AC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185484; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185484 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80185554[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80185554[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80185564[])(void); + +void func_801425CC(void *a0) { + D_80185564[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185548; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185548); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185578[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185578[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185594[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185594[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185764[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185764[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018581C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018581C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C2FC0; +extern u8 D_801C3928; +extern u8 D_801C3929; +extern u8 D_801C392A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C2FC0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C3928 = mul * (local.b[0] >> 4); + D_801C3929 = mul * (local.b[1] >> 4); + D_801C392A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018556C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018556C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185588[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185588); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185754[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185754[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185774[]; +extern unsigned char D_801857D4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185774); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801857D4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C2FBC; +extern u8 D_801C3928; +extern u8 D_801C392C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C2FBC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C3928); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C3928, 0x10); + memcpy(&D_801C392C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018592C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018592C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80185A54[])(void); + +void func_80143B30(void *a0) { + D_80185A54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80185A60[])(void); + +void func_80143C38(void *a0) { + D_80185A60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80185A68[])(void); + +void func_80143C98(void *a0) { + D_80185A68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80143D28); + + +extern void (*D_80185AB0[])(void); + +void func_80143E68(void *a0) { + D_80185AB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80185AC4[])(void); + +void func_80144054(void *a0) { + D_80185AC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80185ACC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80185ACC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185A48; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80185A48, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80185A5C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185A5C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185A5C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80185A70; +extern u8 D_80185A7C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185A70); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185A7C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80185A48; +extern u8 D_80185AB8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80185A48, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80185AB8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80185AD4[])(void); + +void func_801449C8(void *a0) { + D_80185AD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80185ADC[])(void); + +void func_80144A2C(void *a0) { + D_80185ADC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80140608", func_80144B14); + + + diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c b/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c index c9d7f20c3..e3a5b6ffe 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018BD18; -extern u8 *D_8018BD1C; -extern u8 *D_8018BD20; -extern u8 *D_8018BD24; -extern u8 *D_8018BD28; -extern u16 *D_8018BD2C[]; -extern u16 *D_8018BD34[]; -extern u16 *D_8018BD54[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018BD18; - iVar2 = func_80028D58(); - puVar3 = D_8018BD2C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018BD1C; - iVar2 = func_80028DE0(); - puVar3 = D_8018BD2C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018BD20 + 0x18) = *D_8018BD34[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018BD24 + 0x18) = *D_8018BD34[iVar2]; - - puVar1 = D_8018BD28; - iVar2 = func_80028D9C(); - puVar3 = D_8018BD54[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018BC54; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018BC54); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018BC64; -extern char *D_8018BC84; -extern char *D_8018BC88; -extern char *D_8018BC8C; -extern char *D_8018BC90; -extern char *D_8018BC94; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018BC64); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018BC84; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BC88; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BC8C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BC90; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BC94; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018BB1E; -extern unsigned short D_8018BB22; -extern unsigned short D_8018BB26; -extern unsigned short D_8018BB2A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018BB1E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BB22; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BB26; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BB2A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018C0B4[])(void); - -void func_80141788(void) -{ - D_8018C0B4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018C0C0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018C0C0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018C038; -extern s16 D_8018C03A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018BCD8; - extern u8 D_8018BCF0; - extern u8 D_8018BD64; - extern u8 D_8018BD6C; - extern void *D_801BEEB8; - extern void *D_801BEEBC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801BEEB8 = &D_8018BCD8; - D_801BEEBC = &D_8018BD64; - } else { - D_801BEEB8 = &D_8018BCF0; - D_801BEEBC = &D_8018BD6C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018C038 = 0xE; - D_8018C03A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018C03C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018C03C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018C03C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018C014; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018C014 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018C0E4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018C0E4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018C0F4[])(void); - -void func_801425CC(void *a0) { - D_8018C0F4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018C0D8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018C0D8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C108[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C108[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C124[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C124[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C2F4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C2F4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C3AC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C3AC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801BE520; -extern u8 D_801BEEC0; -extern u8 D_801BEEC1; -extern u8 D_801BEEC2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801BE520; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801BEEC0 = mul * (local.b[0] >> 4); - D_801BEEC1 = mul * (local.b[1] >> 4); - D_801BEEC2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018C0FC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C0FC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C118[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C118); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018C2E4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018C2E4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C304[]; -extern unsigned char D_8018C364[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C304); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018C364); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801BE51C; -extern u8 D_801BEEC0; -extern u8 D_801BEEC4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801BE51C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801BEEC0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801BEEC0, 0x10); - memcpy(&D_801BEEC4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018C4BC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018C4BC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018C5E4[])(void); - -void func_80143B30(void *a0) { - D_8018C5E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018C5F0[])(void); - -void func_80143C38(void *a0) { - D_8018C5F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018C5F8[])(void); - -void func_80143C98(void *a0) { - D_8018C5F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018C640[])(void); - -void func_80143E68(void *a0) { - D_8018C640[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018C654[])(void); - -void func_80144054(void *a0) { - D_8018C654[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018C65C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018C65C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018C5D8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018C5D8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018C5EC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C5EC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C5EC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018C600; -extern u8 D_8018C60C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C600); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C60C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018C5D8; -extern u8 D_8018C648; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018C5D8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018C648, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018C664[])(void); - -void func_801449C8(void *a0) { - D_8018C664[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018C66C[])(void); - -void func_80144A2C(void *a0) { - D_8018C66C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_104/ov_SC03_104_jr_80140608.c b/src/ov_SC03_104/ov_SC03_104_jr_80140608.c new file mode 100644 index 000000000..d81ee7fca --- /dev/null +++ b/src/ov_SC03_104/ov_SC03_104_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801BDB90; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018AF58[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801BED74; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C0428; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801BDB90; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018AC94)(); +extern s16 (*D_8018AC98)(); +extern M2C_UNK (*D_8018ACA0)(); +extern s32 (*D_8018ACA4)(); +extern s32 D_801BED70; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801BDB94; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018AFEC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018E4D0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018B004; +extern M2C_UNK D_8018B00C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018B014; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018B030[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018B03C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018B050[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018B0A0[]; +extern s16 D_8018B0D0[]; +extern s16 D_8018B130[]; +extern s16 D_8018B138[]; +extern s16 D_8018B158[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018B190[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018B1E8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018B230[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018B238[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018B240[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018B248[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018B1F0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018B210; +extern void func_801321B0(int param_1); +extern int D_8018B220; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801BEDE0; +extern s32 D_801BEDE4[]; +extern int D_801BEDE8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018B254; +extern u8 D_8018B250; +extern s16 *D_8018B258; +extern u8 D_8018B25C; +extern int D_801BEDE0; +extern u16 D_801BEDF0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018B258; /* holds a pointer value (*(u16**)&D_8018B258) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018B26C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018B2C0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018B2C4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018B308; +extern u8 D_8018B34C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018B390[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018B408, D_8018B40A, D_8018B40C, D_8018B40E, D_8018B410, D_8018B412; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801BEE58; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801BEE5C; +extern s8 D_801BEE5D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801BEE7C; +extern s32 D_801BEE70; +extern s32 D_801BEE74; +extern s32 D_801BEE80; +extern void func_8013CABC(void); +extern s32 D_801BEE78; +extern void func_8013CAE8(void); +extern s32 D_801BEEA8; +extern s32 D_801BEEAC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801BEE88; +extern s32 D_801BEE8C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C0422; +extern u8 D_801C0496; +extern u8 D_801C034A; +extern u8 D_801C0404; +extern u8 D_801C0328; +extern u8 D_801C0349; +extern s32 D_801C0408; +extern void func_8013D330(void); +extern void *D_801BEE60; +extern void *D_801BEE64; +extern void *D_801BEE68; +extern s32 D_801BEE90; +extern s32 D_801BEE94; +extern s32 D_801BEE98; +extern s32 D_801C037C[]; +extern u8 D_8018B500[]; +extern u8 D_8018B5A8[]; +extern u8 D_8018B458[]; +extern u8 D_8018B554[]; +extern u8 D_8018B5D4[]; +extern u8 D_8018B4AC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801BEE6C; +extern s32 D_801BEE9C; +extern s32 D_801BEEA0; +extern s32 D_801BEEA4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801BEE84; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018C060; +extern s32 D_80115188; +extern s16 D_8018C038; +extern s16 D_8018C03A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018C03C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018BD18; +extern u8 *D_8018BD1C; +extern u8 *D_8018BD20; +extern u8 *D_8018BD24; +extern u8 *D_8018BD28; +extern u16 *D_8018BD2C[]; +extern u16 *D_8018BD34[]; +extern u16 *D_8018BD54[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018BD18; + iVar2 = func_80028D58(); + puVar3 = D_8018BD2C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018BD1C; + iVar2 = func_80028DE0(); + puVar3 = D_8018BD2C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018BD20 + 0x18) = *D_8018BD34[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018BD24 + 0x18) = *D_8018BD34[iVar2]; + + puVar1 = D_8018BD28; + iVar2 = func_80028D9C(); + puVar3 = D_8018BD54[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018BC54; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018BC54); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018BC64; +extern char *D_8018BC84; +extern char *D_8018BC88; +extern char *D_8018BC8C; +extern char *D_8018BC90; +extern char *D_8018BC94; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018BC64); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018BC84; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BC88; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BC8C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BC90; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BC94; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018BB1E; +extern unsigned short D_8018BB22; +extern unsigned short D_8018BB26; +extern unsigned short D_8018BB2A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018BB1E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BB22; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BB26; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BB2A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018C0B4[])(void); + +void func_80141788(void) +{ + D_8018C0B4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018C0C0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018C0C0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018C038; +extern s16 D_8018C03A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018BCD8; + extern u8 D_8018BCF0; + extern u8 D_8018BD64; + extern u8 D_8018BD6C; + extern void *D_801BEEB8; + extern void *D_801BEEBC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801BEEB8 = &D_8018BCD8; + D_801BEEBC = &D_8018BD64; + } else { + D_801BEEB8 = &D_8018BCF0; + D_801BEEBC = &D_8018BD6C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018C038 = 0xE; + D_8018C03A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018C03C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018C03C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018C03C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018C014; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018C014 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018C0E4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018C0E4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018C0F4[])(void); + +void func_801425CC(void *a0) { + D_8018C0F4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018C0D8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018C0D8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C108[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C108[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C124[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C124[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C2F4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C2F4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C3AC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C3AC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801BE520; +extern u8 D_801BEEC0; +extern u8 D_801BEEC1; +extern u8 D_801BEEC2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801BE520; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801BEEC0 = mul * (local.b[0] >> 4); + D_801BEEC1 = mul * (local.b[1] >> 4); + D_801BEEC2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018C0FC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018C0FC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C118[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C118); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018C2E4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018C2E4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C304[]; +extern unsigned char D_8018C364[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C304); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018C364); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801BE51C; +extern u8 D_801BEEC0; +extern u8 D_801BEEC4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801BE51C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801BEEC0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801BEEC0, 0x10); + memcpy(&D_801BEEC4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018C4BC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018C4BC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018C5E4[])(void); + +void func_80143B30(void *a0) { + D_8018C5E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018C5F0[])(void); + +void func_80143C38(void *a0) { + D_8018C5F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018C5F8[])(void); + +void func_80143C98(void *a0) { + D_8018C5F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80143D28); + + +extern void (*D_8018C640[])(void); + +void func_80143E68(void *a0) { + D_8018C640[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018C654[])(void); + +void func_80144054(void *a0) { + D_8018C654[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018C65C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018C65C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018C5D8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018C5D8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018C5EC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C5EC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C5EC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018C600; +extern u8 D_8018C60C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C600); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C60C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018C5D8; +extern u8 D_8018C648; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018C5D8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018C648, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018C664[])(void); + +void func_801449C8(void *a0) { + D_8018C664[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018C66C[])(void); + +void func_80144A2C(void *a0) { + D_8018C66C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8013FFD8.c b/src/ov_SC03_105/ov_SC03_105_jr_8013FFD8.c index 135d62666..e4115139b 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_8013FFD8.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018B3A0; -extern u8 *D_8018B3A4; -extern u8 *D_8018B3A8; -extern u8 *D_8018B3AC; -extern u8 *D_8018B3B0; -extern u16 *D_8018B3B4[]; -extern u16 *D_8018B3BC[]; -extern u16 *D_8018B3DC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018B3A0; - iVar2 = func_80028D58(); - puVar3 = D_8018B3B4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018B3A4; - iVar2 = func_80028DE0(); - puVar3 = D_8018B3B4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018B3A8 + 0x18) = *D_8018B3BC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018B3AC + 0x18) = *D_8018B3BC[iVar2]; - - puVar1 = D_8018B3B0; - iVar2 = func_80028D9C(); - puVar3 = D_8018B3DC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018B2DC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018B2DC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018B2EC; -extern char *D_8018B30C; -extern char *D_8018B310; -extern char *D_8018B314; -extern char *D_8018B318; -extern char *D_8018B31C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018B2EC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018B30C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B310; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B314; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B318; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B31C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018B1A6; -extern unsigned short D_8018B1AA; -extern unsigned short D_8018B1AE; -extern unsigned short D_8018B1B2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018B1A6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B1AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B1AE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B1B2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018B73C[])(void); - -void func_80141788(void) -{ - D_8018B73C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018B748[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018B748[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018B6C0; -extern s16 D_8018B6C2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018B360; - extern u8 D_8018B378; - extern u8 D_8018B3EC; - extern u8 D_8018B3F4; - extern void *D_801B8448; - extern void *D_801B844C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B8448 = &D_8018B360; - D_801B844C = &D_8018B3EC; - } else { - D_801B8448 = &D_8018B378; - D_801B844C = &D_8018B3F4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018B6C0 = 0xE; - D_8018B6C2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018B6C4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018B6C4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018B6C4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018B69C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018B69C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018B76C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018B76C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018B77C[])(void); - -void func_801425CC(void *a0) { - D_8018B77C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018B760; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018B760); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018B790[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018B790[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018B7AC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018B7AC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018B97C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018B97C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018BA34[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018BA34[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B7818; -extern u8 D_801B8450; -extern u8 D_801B8451; -extern u8 D_801B8452; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B7818; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B8450 = mul * (local.b[0] >> 4); - D_801B8451 = mul * (local.b[1] >> 4); - D_801B8452 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018B784; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018B784); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018B7A0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018B7A0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018B96C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018B96C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018B98C[]; -extern unsigned char D_8018B9EC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018B98C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018B9EC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B7814; -extern u8 D_801B8450; -extern u8 D_801B8454; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B7814, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8450); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B8450, 0x10); - memcpy(&D_801B8454, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018BB44[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018BB44[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018BC6C[])(void); - -void func_80143B30(void *a0) { - D_8018BC6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018BC78[])(void); - -void func_80143C38(void *a0) { - D_8018BC78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018BC80[])(void); - -void func_80143C98(void *a0) { - D_8018BC80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018BCC8[])(void); - -void func_80143E68(void *a0) { - D_8018BCC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018BCDC[])(void); - -void func_80144054(void *a0) { - D_8018BCDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018BCE4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018BCE4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018BC60; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018BC60, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018BC74; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018BC74 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018BC74 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018BC88; -extern u8 D_8018BC94; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018BC88); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018BC94); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018BC60; -extern u8 D_8018BCD0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018BC60, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018BCD0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018BCEC[])(void); - -void func_801449C8(void *a0) { - D_8018BCEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018BCF4[])(void); - -void func_80144A2C(void *a0) { - D_8018BCF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_105/ov_SC03_105_jr_80140608.c b/src/ov_SC03_105/ov_SC03_105_jr_80140608.c new file mode 100644 index 000000000..4cd41e238 --- /dev/null +++ b/src/ov_SC03_105/ov_SC03_105_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B6E88; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018A5E0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B8304; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801BCCB0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B6E88; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018A31C)(); +extern s16 (*D_8018A320)(); +extern M2C_UNK (*D_8018A328)(); +extern s32 (*D_8018A32C)(); +extern s32 D_801B8300; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B6E8C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018A674; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018DB58; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018A68C; +extern M2C_UNK D_8018A694; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018A69C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018A6B8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018A6C4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018A6D8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018A728[]; +extern s16 D_8018A758[]; +extern s16 D_8018A7B8[]; +extern s16 D_8018A7C0[]; +extern s16 D_8018A7E0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018A818[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018A870[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018A8B8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018A8C0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018A8C8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018A8D0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018A878; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018A898; +extern void func_801321B0(int param_1); +extern int D_8018A8A8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B8370; +extern s32 D_801B8374[]; +extern int D_801B8378; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018A8DC; +extern u8 D_8018A8D8; +extern s16 *D_8018A8E0; +extern u8 D_8018A8E4; +extern int D_801B8370; +extern u16 D_801B8380; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018A8E0; /* holds a pointer value (*(u16**)&D_8018A8E0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018A8F4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018A948; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018A94C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018A990; +extern u8 D_8018A9D4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018AA18[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018AA90, D_8018AA92, D_8018AA94, D_8018AA96, D_8018AA98, D_8018AA9A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B83E8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B83EC; +extern s8 D_801B83ED; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B840C; +extern s32 D_801B8400; +extern s32 D_801B8404; +extern s32 D_801B8410; +extern void func_8013CABC(void); +extern s32 D_801B8408; +extern void func_8013CAE8(void); +extern s32 D_801B8438; +extern s32 D_801B843C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B8418; +extern s32 D_801B841C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801BCCAA; +extern u8 D_801BCD1E; +extern u8 D_801BCBD2; +extern u8 D_801BCC8C; +extern u8 D_801BCBA8; +extern u8 D_801BCBD1; +extern s32 D_801BCC90; +extern void func_8013D330(void); +extern void *D_801B83F0; +extern void *D_801B83F4; +extern void *D_801B83F8; +extern s32 D_801B8420; +extern s32 D_801B8424; +extern s32 D_801B8428; +extern s32 D_801BCC04[]; +extern u8 D_8018AB88[]; +extern u8 D_8018AC30[]; +extern u8 D_8018AAE0[]; +extern u8 D_8018ABDC[]; +extern u8 D_8018AC5C[]; +extern u8 D_8018AB34[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B83FC; +extern s32 D_801B842C; +extern s32 D_801B8430; +extern s32 D_801B8434; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B8414; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018B6E8; +extern s32 D_80115188; +extern s16 D_8018B6C0; +extern s16 D_8018B6C2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018B6C4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018B3A0; +extern u8 *D_8018B3A4; +extern u8 *D_8018B3A8; +extern u8 *D_8018B3AC; +extern u8 *D_8018B3B0; +extern u16 *D_8018B3B4[]; +extern u16 *D_8018B3BC[]; +extern u16 *D_8018B3DC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018B3A0; + iVar2 = func_80028D58(); + puVar3 = D_8018B3B4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018B3A4; + iVar2 = func_80028DE0(); + puVar3 = D_8018B3B4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018B3A8 + 0x18) = *D_8018B3BC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018B3AC + 0x18) = *D_8018B3BC[iVar2]; + + puVar1 = D_8018B3B0; + iVar2 = func_80028D9C(); + puVar3 = D_8018B3DC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018B2DC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018B2DC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018B2EC; +extern char *D_8018B30C; +extern char *D_8018B310; +extern char *D_8018B314; +extern char *D_8018B318; +extern char *D_8018B31C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018B2EC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018B30C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B310; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B314; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B318; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B31C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018B1A6; +extern unsigned short D_8018B1AA; +extern unsigned short D_8018B1AE; +extern unsigned short D_8018B1B2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018B1A6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B1AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B1AE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B1B2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018B73C[])(void); + +void func_80141788(void) +{ + D_8018B73C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018B748[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018B748[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018B6C0; +extern s16 D_8018B6C2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018B360; + extern u8 D_8018B378; + extern u8 D_8018B3EC; + extern u8 D_8018B3F4; + extern void *D_801B8448; + extern void *D_801B844C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B8448 = &D_8018B360; + D_801B844C = &D_8018B3EC; + } else { + D_801B8448 = &D_8018B378; + D_801B844C = &D_8018B3F4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018B6C0 = 0xE; + D_8018B6C2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018B6C4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018B6C4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018B6C4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018B69C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018B69C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018B76C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018B76C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018B77C[])(void); + +void func_801425CC(void *a0) { + D_8018B77C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018B760; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018B760); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018B790[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018B790[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018B7AC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018B7AC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018B97C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018B97C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018BA34[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018BA34[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B7818; +extern u8 D_801B8450; +extern u8 D_801B8451; +extern u8 D_801B8452; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B7818; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B8450 = mul * (local.b[0] >> 4); + D_801B8451 = mul * (local.b[1] >> 4); + D_801B8452 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018B784; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018B784); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018B7A0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018B7A0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018B96C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018B96C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018B98C[]; +extern unsigned char D_8018B9EC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018B98C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018B9EC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B7814; +extern u8 D_801B8450; +extern u8 D_801B8454; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B7814, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8450); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B8450, 0x10); + memcpy(&D_801B8454, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018BB44[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018BB44[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018BC6C[])(void); + +void func_80143B30(void *a0) { + D_8018BC6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018BC78[])(void); + +void func_80143C38(void *a0) { + D_8018BC78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018BC80[])(void); + +void func_80143C98(void *a0) { + D_8018BC80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80143D28); + + +extern void (*D_8018BCC8[])(void); + +void func_80143E68(void *a0) { + D_8018BCC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018BCDC[])(void); + +void func_80144054(void *a0) { + D_8018BCDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018BCE4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018BCE4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018BC60; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018BC60, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018BC74; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018BC74 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018BC74 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018BC88; +extern u8 D_8018BC94; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018BC88); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018BC94); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018BC60; +extern u8 D_8018BCD0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018BC60, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018BCD0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018BCEC[])(void); + +void func_801449C8(void *a0) { + D_8018BCEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018BCF4[])(void); + +void func_80144A2C(void *a0) { + D_8018BCF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c b/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c index d311ac7e4..48959cf0b 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181CF8; -extern u8 *D_80181CFC; -extern u8 *D_80181D00; -extern u8 *D_80181D04; -extern u8 *D_80181D08; -extern u16 *D_80181D0C[]; -extern u16 *D_80181D14[]; -extern u16 *D_80181D34[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181CF8; - iVar2 = func_80028D58(); - puVar3 = D_80181D0C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181CFC; - iVar2 = func_80028DE0(); - puVar3 = D_80181D0C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80181D00 + 0x18) = *D_80181D14[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80181D04 + 0x18) = *D_80181D14[iVar2]; - - puVar1 = D_80181D08; - iVar2 = func_80028D9C(); - puVar3 = D_80181D34[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80181C34; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80181C34); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80181C44; -extern char *D_80181C64; -extern char *D_80181C68; -extern char *D_80181C6C; -extern char *D_80181C70; -extern char *D_80181C74; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80181C44); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80181C64; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181C68; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181C6C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181C70; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181C74; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80181AFE; -extern unsigned short D_80181B02; -extern unsigned short D_80181B06; -extern unsigned short D_80181B0A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80181AFE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80181B02; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181B06; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181B0A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80182094[])(void); - -void func_80141788(void) -{ - D_80182094[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801820A0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801820A0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80182018; -extern s16 D_8018201A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181CB8; - extern u8 D_80181CD0; - extern u8 D_80181D44; - extern u8 D_80181D4C; - extern void *D_801A0738; - extern void *D_801A073C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A0738 = &D_80181CB8; - D_801A073C = &D_80181D44; - } else { - D_801A0738 = &D_80181CD0; - D_801A073C = &D_80181D4C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80182018 = 0xE; - D_8018201A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018201C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018201C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018201C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80181FF4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80181FF4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801820C4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801820C4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801820D4[])(void); - -void func_801425CC(void *a0) { - D_801820D4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801820B8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801820B8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801820E8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801820E8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182104[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182104[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801822D4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801822D4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018238C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018238C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019FD20; -extern u8 D_801A0740; -extern u8 D_801A0741; -extern u8 D_801A0742; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019FD20; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A0740 = mul * (local.b[0] >> 4); - D_801A0741 = mul * (local.b[1] >> 4); - D_801A0742 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801820DC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801820DC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801820F8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801820F8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801822C4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801822C4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801822E4[]; -extern unsigned char D_80182344[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801822E4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80182344); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019FD1C; -extern u8 D_801A0740; -extern u8 D_801A0744; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019FD1C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0740); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A0740, 0x10); - memcpy(&D_801A0744, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018249C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018249C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801825C4[])(void); - -void func_80143B30(void *a0) { - D_801825C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801825D0[])(void); - -void func_80143C38(void *a0) { - D_801825D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801825D8[])(void); - -void func_80143C98(void *a0) { - D_801825D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80143D28); - - -extern void (*D_80182620[])(void); - -void func_80143E68(void *a0) { - D_80182620[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80182634[])(void); - -void func_80144054(void *a0) { - D_80182634[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018263C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018263C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801825B8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801825B8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801825CC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801825CC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801825CC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801825E0; -extern u8 D_801825EC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801825E0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801825EC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801825B8; -extern u8 D_80182628; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801825B8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80182628, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80182644[])(void); - -void func_801449C8(void *a0) { - D_80182644[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018264C[])(void); - -void func_80144A2C(void *a0) { - D_8018264C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_108/ov_SC03_108_jr_80140608.c b/src/ov_SC03_108/ov_SC03_108_jr_80140608.c new file mode 100644 index 000000000..48ed7f9e1 --- /dev/null +++ b/src/ov_SC03_108/ov_SC03_108_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019F390; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80180F38[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A05F4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A1A38; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019F390; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80180C74)(); +extern s16 (*D_80180C78)(); +extern M2C_UNK (*D_80180C80)(); +extern s32 (*D_80180C84)(); +extern s32 D_801A05F0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019F394; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80180FCC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801844B0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80180FE4; +extern M2C_UNK D_80180FEC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80180FF4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80181010[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018101C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80181030[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80181080[]; +extern s16 D_801810B0[]; +extern s16 D_80181110[]; +extern s16 D_80181118[]; +extern s16 D_80181138[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80181170[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801811C8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80181210[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80181218[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80181220[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80181228[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801811D0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801811F0; +extern void func_801321B0(int param_1); +extern int D_80181200; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A0660; +extern s32 D_801A0664[]; +extern int D_801A0668; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80181234; +extern u8 D_80181230; +extern s16 *D_80181238; +extern u8 D_8018123C; +extern int D_801A0660; +extern u16 D_801A0670; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80181238; /* holds a pointer value (*(u16**)&D_80181238) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018124C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801812A0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801812A4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801812E8; +extern u8 D_8018132C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80181370[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801813E8, D_801813EA, D_801813EC, D_801813EE, D_801813F0, D_801813F2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A06D8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A06DC; +extern s8 D_801A06DD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A06FC; +extern s32 D_801A06F0; +extern s32 D_801A06F4; +extern s32 D_801A0700; +extern void func_8013CABC(void); +extern s32 D_801A06F8; +extern void func_8013CAE8(void); +extern s32 D_801A0728; +extern s32 D_801A072C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A0708; +extern s32 D_801A070C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A1A32; +extern u8 D_801A1AA6; +extern u8 D_801A195A; +extern u8 D_801A1A14; +extern u8 D_801A1938; +extern u8 D_801A1959; +extern s32 D_801A1A18; +extern void func_8013D330(void); +extern void *D_801A06E0; +extern void *D_801A06E4; +extern void *D_801A06E8; +extern s32 D_801A0710; +extern s32 D_801A0714; +extern s32 D_801A0718; +extern s32 D_801A198C[]; +extern u8 D_801814E0[]; +extern u8 D_80181588[]; +extern u8 D_80181438[]; +extern u8 D_80181534[]; +extern u8 D_801815B4[]; +extern u8 D_8018148C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A06EC; +extern s32 D_801A071C; +extern s32 D_801A0720; +extern s32 D_801A0724; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A0704; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80182040; +extern s32 D_80115188; +extern s16 D_80182018; +extern s16 D_8018201A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018201C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181CF8; +extern u8 *D_80181CFC; +extern u8 *D_80181D00; +extern u8 *D_80181D04; +extern u8 *D_80181D08; +extern u16 *D_80181D0C[]; +extern u16 *D_80181D14[]; +extern u16 *D_80181D34[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181CF8; + iVar2 = func_80028D58(); + puVar3 = D_80181D0C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181CFC; + iVar2 = func_80028DE0(); + puVar3 = D_80181D0C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80181D00 + 0x18) = *D_80181D14[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80181D04 + 0x18) = *D_80181D14[iVar2]; + + puVar1 = D_80181D08; + iVar2 = func_80028D9C(); + puVar3 = D_80181D34[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80181C34; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80181C34); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80181C44; +extern char *D_80181C64; +extern char *D_80181C68; +extern char *D_80181C6C; +extern char *D_80181C70; +extern char *D_80181C74; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80181C44); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80181C64; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181C68; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181C6C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181C70; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181C74; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80181AFE; +extern unsigned short D_80181B02; +extern unsigned short D_80181B06; +extern unsigned short D_80181B0A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80181AFE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80181B02; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181B06; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181B0A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80182094[])(void); + +void func_80141788(void) +{ + D_80182094[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801820A0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801820A0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80182018; +extern s16 D_8018201A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181CB8; + extern u8 D_80181CD0; + extern u8 D_80181D44; + extern u8 D_80181D4C; + extern void *D_801A0738; + extern void *D_801A073C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A0738 = &D_80181CB8; + D_801A073C = &D_80181D44; + } else { + D_801A0738 = &D_80181CD0; + D_801A073C = &D_80181D4C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80182018 = 0xE; + D_8018201A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018201C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018201C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018201C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80181FF4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80181FF4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801820C4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801820C4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801820D4[])(void); + +void func_801425CC(void *a0) { + D_801820D4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801820B8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801820B8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801820E8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801820E8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182104[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182104[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801822D4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801822D4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018238C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018238C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019FD20; +extern u8 D_801A0740; +extern u8 D_801A0741; +extern u8 D_801A0742; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019FD20; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A0740 = mul * (local.b[0] >> 4); + D_801A0741 = mul * (local.b[1] >> 4); + D_801A0742 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801820DC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801820DC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801820F8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801820F8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801822C4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801822C4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801822E4[]; +extern unsigned char D_80182344[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801822E4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80182344); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019FD1C; +extern u8 D_801A0740; +extern u8 D_801A0744; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019FD1C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0740); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A0740, 0x10); + memcpy(&D_801A0744, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018249C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018249C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801825C4[])(void); + +void func_80143B30(void *a0) { + D_801825C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801825D0[])(void); + +void func_80143C38(void *a0) { + D_801825D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801825D8[])(void); + +void func_80143C98(void *a0) { + D_801825D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80143D28); + + +extern void (*D_80182620[])(void); + +void func_80143E68(void *a0) { + D_80182620[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80182634[])(void); + +void func_80144054(void *a0) { + D_80182634[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018263C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018263C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801825B8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801825B8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801825CC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801825CC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801825CC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801825E0; +extern u8 D_801825EC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801825E0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801825EC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801825B8; +extern u8 D_80182628; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801825B8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80182628, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80182644[])(void); + +void func_801449C8(void *a0) { + D_80182644[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018264C[])(void); + +void func_80144A2C(void *a0) { + D_8018264C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c b/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c index 6e1943d40..a889bf320 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F3A4; -extern u8 *D_8017F3A8; -extern u8 *D_8017F3AC; -extern u8 *D_8017F3B0; -extern u8 *D_8017F3B4; -extern u16 *D_8017F3B8[]; -extern u16 *D_8017F3C0[]; -extern u16 *D_8017F3E0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F3A4; - iVar2 = func_80028D58(); - puVar3 = D_8017F3B8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F3A8; - iVar2 = func_80028DE0(); - puVar3 = D_8017F3B8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F3AC + 0x18) = *D_8017F3C0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F3B0 + 0x18) = *D_8017F3C0[iVar2]; - - puVar1 = D_8017F3B4; - iVar2 = func_80028D9C(); - puVar3 = D_8017F3E0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F2E0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F2E0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F2F0; -extern char *D_8017F310; -extern char *D_8017F314; -extern char *D_8017F318; -extern char *D_8017F31C; -extern char *D_8017F320; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F2F0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F310; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F314; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F318; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F31C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F320; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F1AA; -extern unsigned short D_8017F1AE; -extern unsigned short D_8017F1B2; -extern unsigned short D_8017F1B6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F1AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F1AE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F1B2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F1B6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F740[])(void); - -void func_80141788(void) -{ - D_8017F740[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F74C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F74C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F6C4; -extern s16 D_8017F6C6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F364; - extern u8 D_8017F37C; - extern u8 D_8017F3F0; - extern u8 D_8017F3F8; - extern void *D_80199148; - extern void *D_8019914C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80199148 = &D_8017F364; - D_8019914C = &D_8017F3F0; - } else { - D_80199148 = &D_8017F37C; - D_8019914C = &D_8017F3F8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F6C4 = 0xE; - D_8017F6C6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F6C8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F6C8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F6C8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F6A0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F6A0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F770[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F770[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F780[])(void); - -void func_801425CC(void *a0) { - D_8017F780[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F764; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F764); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F794[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F794[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F7B0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F7B0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F980[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F980[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FA38[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FA38[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80198830; -extern u8 D_80199150; -extern u8 D_80199151; -extern u8 D_80199152; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80198830; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80199150 = mul * (local.b[0] >> 4); - D_80199151 = mul * (local.b[1] >> 4); - D_80199152 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F788; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F788); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F7A4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F7A4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F970[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F970[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F990[]; -extern unsigned char D_8017F9F0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F990); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F9F0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019882C; -extern u8 D_80199150; -extern u8 D_80199154; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019882C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80199150); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80199150, 0x10); - memcpy(&D_80199154, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017FB48[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017FB48[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017FC70[])(void); - -void func_80143B30(void *a0) { - D_8017FC70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017FC7C[])(void); - -void func_80143C38(void *a0) { - D_8017FC7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017FC84[])(void); - -void func_80143C98(void *a0) { - D_8017FC84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017FCCC[])(void); - -void func_80143E68(void *a0) { - D_8017FCCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017FCE0[])(void); - -void func_80144054(void *a0) { - D_8017FCE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017FCE8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017FCE8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017FC64; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FC64, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017FC78; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FC78 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FC78 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017FC8C; -extern u8 D_8017FC98; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FC8C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FC98); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017FC64; -extern u8 D_8017FCD4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FC64, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017FCD4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017FCF0[])(void); - -void func_801449C8(void *a0) { - D_8017FCF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017FCF8[])(void); - -void func_80144A2C(void *a0) { - D_8017FCF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_109/ov_SC03_109_jr_80140608.c b/src/ov_SC03_109/ov_SC03_109_jr_80140608.c new file mode 100644 index 000000000..864cf4d67 --- /dev/null +++ b/src/ov_SC03_109/ov_SC03_109_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80197EA0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E5E4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80199004; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019A440; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80197EA0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017E320)(); +extern s16 (*D_8017E324)(); +extern M2C_UNK (*D_8017E32C)(); +extern s32 (*D_8017E330)(); +extern s32 D_80199000; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80197EA4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E678; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80181B5C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E690; +extern M2C_UNK D_8017E698; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E6A0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E6BC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E6C8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E6DC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E72C[]; +extern s16 D_8017E75C[]; +extern s16 D_8017E7BC[]; +extern s16 D_8017E7C4[]; +extern s16 D_8017E7E4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E81C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E874[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E8BC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E8C4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E8CC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E8D4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E87C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E89C; +extern void func_801321B0(int param_1); +extern int D_8017E8AC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80199070; +extern s32 D_80199074[]; +extern int D_80199078; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E8E0; +extern u8 D_8017E8DC; +extern s16 *D_8017E8E4; +extern u8 D_8017E8E8; +extern int D_80199070; +extern u16 D_80199080; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E8E4; /* holds a pointer value (*(u16**)&D_8017E8E4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E8F8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E94C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E950[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E994; +extern u8 D_8017E9D8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017EA1C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017EA94, D_8017EA96, D_8017EA98, D_8017EA9A, D_8017EA9C, D_8017EA9E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801990E8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801990EC; +extern s8 D_801990ED; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019910C; +extern s32 D_80199100; +extern s32 D_80199104; +extern s32 D_80199110; +extern void func_8013CABC(void); +extern s32 D_80199108; +extern void func_8013CAE8(void); +extern s32 D_80199138; +extern s32 D_8019913C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80199118; +extern s32 D_8019911C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019A43A; +extern u8 D_8019A4AE; +extern u8 D_8019A362; +extern u8 D_8019A41C; +extern u8 D_8019A340; +extern u8 D_8019A361; +extern s32 D_8019A420; +extern void func_8013D330(void); +extern void *D_801990F0; +extern void *D_801990F4; +extern void *D_801990F8; +extern s32 D_80199120; +extern s32 D_80199124; +extern s32 D_80199128; +extern s32 D_8019A394[]; +extern u8 D_8017EB8C[]; +extern u8 D_8017EC34[]; +extern u8 D_8017EAE4[]; +extern u8 D_8017EBE0[]; +extern u8 D_8017EC60[]; +extern u8 D_8017EB38[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801990FC; +extern s32 D_8019912C; +extern s32 D_80199130; +extern s32 D_80199134; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80199114; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F6EC; +extern s32 D_80115188; +extern s16 D_8017F6C4; +extern s16 D_8017F6C6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F6C8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F3A4; +extern u8 *D_8017F3A8; +extern u8 *D_8017F3AC; +extern u8 *D_8017F3B0; +extern u8 *D_8017F3B4; +extern u16 *D_8017F3B8[]; +extern u16 *D_8017F3C0[]; +extern u16 *D_8017F3E0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F3A4; + iVar2 = func_80028D58(); + puVar3 = D_8017F3B8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F3A8; + iVar2 = func_80028DE0(); + puVar3 = D_8017F3B8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F3AC + 0x18) = *D_8017F3C0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F3B0 + 0x18) = *D_8017F3C0[iVar2]; + + puVar1 = D_8017F3B4; + iVar2 = func_80028D9C(); + puVar3 = D_8017F3E0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F2E0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F2E0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F2F0; +extern char *D_8017F310; +extern char *D_8017F314; +extern char *D_8017F318; +extern char *D_8017F31C; +extern char *D_8017F320; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F2F0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F310; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F314; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F318; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F31C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F320; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F1AA; +extern unsigned short D_8017F1AE; +extern unsigned short D_8017F1B2; +extern unsigned short D_8017F1B6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F1AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F1AE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F1B2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F1B6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F740[])(void); + +void func_80141788(void) +{ + D_8017F740[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F74C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F74C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F6C4; +extern s16 D_8017F6C6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F364; + extern u8 D_8017F37C; + extern u8 D_8017F3F0; + extern u8 D_8017F3F8; + extern void *D_80199148; + extern void *D_8019914C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80199148 = &D_8017F364; + D_8019914C = &D_8017F3F0; + } else { + D_80199148 = &D_8017F37C; + D_8019914C = &D_8017F3F8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F6C4 = 0xE; + D_8017F6C6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F6C8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F6C8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F6C8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F6A0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F6A0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F770[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F770[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F780[])(void); + +void func_801425CC(void *a0) { + D_8017F780[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F764; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F764); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F794[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F794[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F7B0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F7B0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F980[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F980[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FA38[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FA38[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80198830; +extern u8 D_80199150; +extern u8 D_80199151; +extern u8 D_80199152; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80198830; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80199150 = mul * (local.b[0] >> 4); + D_80199151 = mul * (local.b[1] >> 4); + D_80199152 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F788; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F788); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F7A4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F7A4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F970[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F970[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F990[]; +extern unsigned char D_8017F9F0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F990); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F9F0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019882C; +extern u8 D_80199150; +extern u8 D_80199154; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019882C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80199150); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80199150, 0x10); + memcpy(&D_80199154, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017FB48[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017FB48[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017FC70[])(void); + +void func_80143B30(void *a0) { + D_8017FC70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017FC7C[])(void); + +void func_80143C38(void *a0) { + D_8017FC7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017FC84[])(void); + +void func_80143C98(void *a0) { + D_8017FC84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80143D28); + + +extern void (*D_8017FCCC[])(void); + +void func_80143E68(void *a0) { + D_8017FCCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017FCE0[])(void); + +void func_80144054(void *a0) { + D_8017FCE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017FCE8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017FCE8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017FC64; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FC64, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017FC78; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FC78 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FC78 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017FC8C; +extern u8 D_8017FC98; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FC8C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FC98); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017FC64; +extern u8 D_8017FCD4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FC64, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017FCD4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017FCF0[])(void); + +void func_801449C8(void *a0) { + D_8017FCF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017FCF8[])(void); + +void func_80144A2C(void *a0) { + D_8017FCF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c b/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c index 22b98d62a..36427660b 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80182DC4; -extern u8 *D_80182DC8; -extern u8 *D_80182DCC; -extern u8 *D_80182DD0; -extern u8 *D_80182DD4; -extern u16 *D_80182DD8[]; -extern u16 *D_80182DE0[]; -extern u16 *D_80182E00[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80182DC4; - iVar2 = func_80028D58(); - puVar3 = D_80182DD8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80182DC8; - iVar2 = func_80028DE0(); - puVar3 = D_80182DD8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80182DCC + 0x18) = *D_80182DE0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80182DD0 + 0x18) = *D_80182DE0[iVar2]; - - puVar1 = D_80182DD4; - iVar2 = func_80028D9C(); - puVar3 = D_80182E00[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80182D00; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80182D00); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80182D10; -extern char *D_80182D30; -extern char *D_80182D34; -extern char *D_80182D38; -extern char *D_80182D3C; -extern char *D_80182D40; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80182D10); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80182D30; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D34; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D38; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D3C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D40; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80182BCA; -extern unsigned short D_80182BCE; -extern unsigned short D_80182BD2; -extern unsigned short D_80182BD6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80182BCA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80182BCE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182BD2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182BD6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183160[])(void); - -void func_80141788(void) -{ - D_80183160[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018316C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018316C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801830E4; -extern s16 D_801830E6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182D84; - extern u8 D_80182D9C; - extern u8 D_80182E10; - extern u8 D_80182E18; - extern void *D_801A0EF0; - extern void *D_801A0EF4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A0EF0 = &D_80182D84; - D_801A0EF4 = &D_80182E10; - } else { - D_801A0EF0 = &D_80182D9C; - D_801A0EF4 = &D_80182E18; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801830E4 = 0xE; - D_801830E6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801830E8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801830E8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801830E8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801830C0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801830C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183190[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183190[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801831A0[])(void); - -void func_801425CC(void *a0) { - D_801831A0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183184; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183184); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801831B4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801831B4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801831D0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801831D0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801833A0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801833A0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183458[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183458[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A04CC; -extern u8 D_801A0EF8; -extern u8 D_801A0EF9; -extern u8 D_801A0EFA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A04CC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A0EF8 = mul * (local.b[0] >> 4); - D_801A0EF9 = mul * (local.b[1] >> 4); - D_801A0EFA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801831A8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801831A8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801831C4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801831C4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183390[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183390[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801833B0[]; -extern unsigned char D_80183410[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801833B0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183410); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A04C8; -extern u8 D_801A0EF8; -extern u8 D_801A0EFC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A04C8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0EF8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A0EF8, 0x10); - memcpy(&D_801A0EFC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183568[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183568[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183690[])(void); - -void func_80143B30(void *a0) { - D_80183690[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018369C[])(void); - -void func_80143C38(void *a0) { - D_8018369C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801836A4[])(void); - -void func_80143C98(void *a0) { - D_801836A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80143D28); - - -extern void (*D_801836EC[])(void); - -void func_80143E68(void *a0) { - D_801836EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183700[])(void); - -void func_80144054(void *a0) { - D_80183700[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183708[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183708[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183684; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183684, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183698; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183698 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183698 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801836AC; -extern u8 D_801836B8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801836AC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801836B8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183684; -extern u8 D_801836F4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183684, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801836F4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183710[])(void); - -void func_801449C8(void *a0) { - D_80183710[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183718[])(void); - -void func_80144A2C(void *a0) { - D_80183718[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_110/ov_SC03_110_jr_80140608.c b/src/ov_SC03_110/ov_SC03_110_jr_80140608.c new file mode 100644 index 000000000..b420fb42d --- /dev/null +++ b/src/ov_SC03_110/ov_SC03_110_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019FB3C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182004[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A0DAC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A2470; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019FB3C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80181D40)(); +extern s16 (*D_80181D44)(); +extern M2C_UNK (*D_80181D4C)(); +extern s32 (*D_80181D50)(); +extern s32 D_801A0DA8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019FB40; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80182098; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018557C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801820B0; +extern M2C_UNK D_801820B8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801820C0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801820DC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801820E8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801820FC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018214C[]; +extern s16 D_8018217C[]; +extern s16 D_801821DC[]; +extern s16 D_801821E4[]; +extern s16 D_80182204[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018223C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182294[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801822DC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801822E4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801822EC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801822F4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018229C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801822BC; +extern void func_801321B0(int param_1); +extern int D_801822CC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A0E18; +extern s32 D_801A0E1C[]; +extern int D_801A0E20; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182300; +extern u8 D_801822FC; +extern s16 *D_80182304; +extern u8 D_80182308; +extern int D_801A0E18; +extern u16 D_801A0E28; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182304; /* holds a pointer value (*(u16**)&D_80182304) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182318[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018236C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182370[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801823B4; +extern u8 D_801823F8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018243C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801824B4, D_801824B6, D_801824B8, D_801824BA, D_801824BC, D_801824BE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A0E90; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A0E94; +extern s8 D_801A0E95; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A0EB4; +extern s32 D_801A0EA8; +extern s32 D_801A0EAC; +extern s32 D_801A0EB8; +extern void func_8013CABC(void); +extern s32 D_801A0EB0; +extern void func_8013CAE8(void); +extern s32 D_801A0EE0; +extern s32 D_801A0EE4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A0EC0; +extern s32 D_801A0EC4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A246A; +extern u8 D_801A24DE; +extern u8 D_801A2392; +extern u8 D_801A244C; +extern u8 D_801A2370; +extern u8 D_801A2391; +extern s32 D_801A2450; +extern void func_8013D330(void); +extern void *D_801A0E98; +extern void *D_801A0E9C; +extern void *D_801A0EA0; +extern s32 D_801A0EC8; +extern s32 D_801A0ECC; +extern s32 D_801A0ED0; +extern s32 D_801A23C4[]; +extern u8 D_801825AC[]; +extern u8 D_80182654[]; +extern u8 D_80182504[]; +extern u8 D_80182600[]; +extern u8 D_80182680[]; +extern u8 D_80182558[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A0EA4; +extern s32 D_801A0ED4; +extern s32 D_801A0ED8; +extern s32 D_801A0EDC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A0EBC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018310C; +extern s32 D_80115188; +extern s16 D_801830E4; +extern s16 D_801830E6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801830E8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80182DC4; +extern u8 *D_80182DC8; +extern u8 *D_80182DCC; +extern u8 *D_80182DD0; +extern u8 *D_80182DD4; +extern u16 *D_80182DD8[]; +extern u16 *D_80182DE0[]; +extern u16 *D_80182E00[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80182DC4; + iVar2 = func_80028D58(); + puVar3 = D_80182DD8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80182DC8; + iVar2 = func_80028DE0(); + puVar3 = D_80182DD8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80182DCC + 0x18) = *D_80182DE0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80182DD0 + 0x18) = *D_80182DE0[iVar2]; + + puVar1 = D_80182DD4; + iVar2 = func_80028D9C(); + puVar3 = D_80182E00[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80182D00; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80182D00); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80182D10; +extern char *D_80182D30; +extern char *D_80182D34; +extern char *D_80182D38; +extern char *D_80182D3C; +extern char *D_80182D40; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80182D10); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80182D30; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D34; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D38; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D3C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D40; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80182BCA; +extern unsigned short D_80182BCE; +extern unsigned short D_80182BD2; +extern unsigned short D_80182BD6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80182BCA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80182BCE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182BD2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182BD6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183160[])(void); + +void func_80141788(void) +{ + D_80183160[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018316C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018316C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801830E4; +extern s16 D_801830E6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182D84; + extern u8 D_80182D9C; + extern u8 D_80182E10; + extern u8 D_80182E18; + extern void *D_801A0EF0; + extern void *D_801A0EF4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A0EF0 = &D_80182D84; + D_801A0EF4 = &D_80182E10; + } else { + D_801A0EF0 = &D_80182D9C; + D_801A0EF4 = &D_80182E18; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801830E4 = 0xE; + D_801830E6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801830E8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801830E8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801830E8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801830C0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801830C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183190[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183190[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801831A0[])(void); + +void func_801425CC(void *a0) { + D_801831A0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183184; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183184); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801831B4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801831B4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801831D0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801831D0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801833A0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801833A0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183458[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183458[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A04CC; +extern u8 D_801A0EF8; +extern u8 D_801A0EF9; +extern u8 D_801A0EFA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A04CC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A0EF8 = mul * (local.b[0] >> 4); + D_801A0EF9 = mul * (local.b[1] >> 4); + D_801A0EFA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801831A8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801831A8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801831C4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801831C4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183390[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183390[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801833B0[]; +extern unsigned char D_80183410[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801833B0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183410); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A04C8; +extern u8 D_801A0EF8; +extern u8 D_801A0EFC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A04C8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0EF8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A0EF8, 0x10); + memcpy(&D_801A0EFC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183568[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183568[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183690[])(void); + +void func_80143B30(void *a0) { + D_80183690[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018369C[])(void); + +void func_80143C38(void *a0) { + D_8018369C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801836A4[])(void); + +void func_80143C98(void *a0) { + D_801836A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80143D28); + + +extern void (*D_801836EC[])(void); + +void func_80143E68(void *a0) { + D_801836EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183700[])(void); + +void func_80144054(void *a0) { + D_80183700[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183708[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183708[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183684; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183684, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183698; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183698 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183698 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801836AC; +extern u8 D_801836B8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801836AC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801836B8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183684; +extern u8 D_801836F4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183684, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801836F4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183710[])(void); + +void func_801449C8(void *a0) { + D_80183710[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183718[])(void); + +void func_80144A2C(void *a0) { + D_80183718[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c b/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c index 0ecd0f1cc..0dee25682 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185978; -extern u8 *D_8018597C; -extern u8 *D_80185980; -extern u8 *D_80185984; -extern u8 *D_80185988; -extern u16 *D_8018598C[]; -extern u16 *D_80185994[]; -extern u16 *D_801859B4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185978; - iVar2 = func_80028D58(); - puVar3 = D_8018598C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018597C; - iVar2 = func_80028DE0(); - puVar3 = D_8018598C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185980 + 0x18) = *D_80185994[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185984 + 0x18) = *D_80185994[iVar2]; - - puVar1 = D_80185988; - iVar2 = func_80028D9C(); - puVar3 = D_801859B4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801858B4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801858B4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801858C4; -extern char *D_801858E4; -extern char *D_801858E8; -extern char *D_801858EC; -extern char *D_801858F0; -extern char *D_801858F4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801858C4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801858E4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858E8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858EC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858F0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801858F4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018577E; -extern unsigned short D_80185782; -extern unsigned short D_80185786; -extern unsigned short D_8018578A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018577E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185782; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185786; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018578A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80185D14[])(void); - -void func_80141788(void) -{ - D_80185D14[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80185D20[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80185D20[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80185C98; -extern s16 D_80185C9A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185938; - extern u8 D_80185950; - extern u8 D_801859C4; - extern u8 D_801859CC; - extern void *D_801B83F8; - extern void *D_801B83FC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B83F8 = &D_80185938; - D_801B83FC = &D_801859C4; - } else { - D_801B83F8 = &D_80185950; - D_801B83FC = &D_801859CC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80185C98 = 0xE; - D_80185C9A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80185C9C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80185C9C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80185C9C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185C74; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185C74 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80185D44[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80185D44[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80185D54[])(void); - -void func_801425CC(void *a0) { - D_80185D54[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185D38; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185D38); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185D68[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185D68[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185D84[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185D84[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185F54[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185F54[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018600C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018600C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B7A4C; -extern u8 D_801B8400; -extern u8 D_801B8401; -extern u8 D_801B8402; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B7A4C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B8400 = mul * (local.b[0] >> 4); - D_801B8401 = mul * (local.b[1] >> 4); - D_801B8402 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80185D5C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185D5C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185D78[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185D78); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185F44[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185F44[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185F64[]; -extern unsigned char D_80185FC4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185F64); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185FC4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B7A48; -extern u8 D_801B8400; -extern u8 D_801B8404; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B7A48, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8400); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B8400, 0x10); - memcpy(&D_801B8404, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018611C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018611C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80186244[])(void); - -void func_80143B30(void *a0) { - D_80186244[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80186250[])(void); - -void func_80143C38(void *a0) { - D_80186250[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80186258[])(void); - -void func_80143C98(void *a0) { - D_80186258[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80143D28); - - -extern void (*D_801862A0[])(void); - -void func_80143E68(void *a0) { - D_801862A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801862B4[])(void); - -void func_80144054(void *a0) { - D_801862B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801862BC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801862BC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80186238; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80186238, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018624C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018624C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018624C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80186260; -extern u8 D_8018626C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186260); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018626C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80186238; -extern u8 D_801862A8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80186238, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801862A8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801862C4[])(void); - -void func_801449C8(void *a0) { - D_801862C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801862CC[])(void); - -void func_80144A2C(void *a0) { - D_801862CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_111/ov_SC03_111_jr_80140608.c b/src/ov_SC03_111/ov_SC03_111_jr_80140608.c new file mode 100644 index 000000000..be5321c91 --- /dev/null +++ b/src/ov_SC03_111/ov_SC03_111_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B70BC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184BB8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B82B4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B9B18; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B70BC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801848F4)(); +extern s16 (*D_801848F8)(); +extern M2C_UNK (*D_80184900)(); +extern s32 (*D_80184904)(); +extern s32 D_801B82B0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B70C0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80184C4C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80188130; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184C64; +extern M2C_UNK D_80184C6C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184C74; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80184C90[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80184C9C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80184CB0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80184D00[]; +extern s16 D_80184D30[]; +extern s16 D_80184D90[]; +extern s16 D_80184D98[]; +extern s16 D_80184DB8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80184DF0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80184E48[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80184E90[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80184E98[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80184EA0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184EA8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80184E50; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80184E70; +extern void func_801321B0(int param_1); +extern int D_80184E80; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B8320; +extern s32 D_801B8324[]; +extern int D_801B8328; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184EB4; +extern u8 D_80184EB0; +extern s16 *D_80184EB8; +extern u8 D_80184EBC; +extern int D_801B8320; +extern u16 D_801B8330; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184EB8; /* holds a pointer value (*(u16**)&D_80184EB8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80184ECC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184F20; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184F24[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184F68; +extern u8 D_80184FAC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184FF0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185068, D_8018506A, D_8018506C, D_8018506E, D_80185070, D_80185072; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B8398; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B839C; +extern s8 D_801B839D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B83BC; +extern s32 D_801B83B0; +extern s32 D_801B83B4; +extern s32 D_801B83C0; +extern void func_8013CABC(void); +extern s32 D_801B83B8; +extern void func_8013CAE8(void); +extern s32 D_801B83E8; +extern s32 D_801B83EC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B83C8; +extern s32 D_801B83CC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B9B12; +extern u8 D_801B9B86; +extern u8 D_801B9A3A; +extern u8 D_801B9AF4; +extern u8 D_801B9A18; +extern u8 D_801B9A39; +extern s32 D_801B9AF8; +extern void func_8013D330(void); +extern void *D_801B83A0; +extern void *D_801B83A4; +extern void *D_801B83A8; +extern s32 D_801B83D0; +extern s32 D_801B83D4; +extern s32 D_801B83D8; +extern s32 D_801B9A6C[]; +extern u8 D_80185160[]; +extern u8 D_80185208[]; +extern u8 D_801850B8[]; +extern u8 D_801851B4[]; +extern u8 D_80185234[]; +extern u8 D_8018510C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B83AC; +extern s32 D_801B83DC; +extern s32 D_801B83E0; +extern s32 D_801B83E4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B83C4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80185CC0; +extern s32 D_80115188; +extern s16 D_80185C98; +extern s16 D_80185C9A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80185C9C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185978; +extern u8 *D_8018597C; +extern u8 *D_80185980; +extern u8 *D_80185984; +extern u8 *D_80185988; +extern u16 *D_8018598C[]; +extern u16 *D_80185994[]; +extern u16 *D_801859B4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185978; + iVar2 = func_80028D58(); + puVar3 = D_8018598C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018597C; + iVar2 = func_80028DE0(); + puVar3 = D_8018598C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185980 + 0x18) = *D_80185994[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185984 + 0x18) = *D_80185994[iVar2]; + + puVar1 = D_80185988; + iVar2 = func_80028D9C(); + puVar3 = D_801859B4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801858B4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801858B4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801858C4; +extern char *D_801858E4; +extern char *D_801858E8; +extern char *D_801858EC; +extern char *D_801858F0; +extern char *D_801858F4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801858C4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801858E4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858E8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858EC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858F0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801858F4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018577E; +extern unsigned short D_80185782; +extern unsigned short D_80185786; +extern unsigned short D_8018578A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018577E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185782; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185786; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018578A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80185D14[])(void); + +void func_80141788(void) +{ + D_80185D14[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80185D20[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80185D20[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80185C98; +extern s16 D_80185C9A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185938; + extern u8 D_80185950; + extern u8 D_801859C4; + extern u8 D_801859CC; + extern void *D_801B83F8; + extern void *D_801B83FC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B83F8 = &D_80185938; + D_801B83FC = &D_801859C4; + } else { + D_801B83F8 = &D_80185950; + D_801B83FC = &D_801859CC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80185C98 = 0xE; + D_80185C9A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80185C9C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80185C9C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80185C9C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185C74; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185C74 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80185D44[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80185D44[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80185D54[])(void); + +void func_801425CC(void *a0) { + D_80185D54[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185D38; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185D38); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185D68[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185D68[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185D84[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185D84[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185F54[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185F54[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018600C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018600C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B7A4C; +extern u8 D_801B8400; +extern u8 D_801B8401; +extern u8 D_801B8402; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B7A4C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B8400 = mul * (local.b[0] >> 4); + D_801B8401 = mul * (local.b[1] >> 4); + D_801B8402 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80185D5C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185D5C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185D78[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185D78); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185F44[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185F44[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185F64[]; +extern unsigned char D_80185FC4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185F64); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185FC4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B7A48; +extern u8 D_801B8400; +extern u8 D_801B8404; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B7A48, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8400); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B8400, 0x10); + memcpy(&D_801B8404, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018611C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018611C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80186244[])(void); + +void func_80143B30(void *a0) { + D_80186244[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80186250[])(void); + +void func_80143C38(void *a0) { + D_80186250[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80186258[])(void); + +void func_80143C98(void *a0) { + D_80186258[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80143D28); + + +extern void (*D_801862A0[])(void); + +void func_80143E68(void *a0) { + D_801862A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801862B4[])(void); + +void func_80144054(void *a0) { + D_801862B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801862BC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801862BC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186238; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80186238, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018624C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018624C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018624C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80186260; +extern u8 D_8018626C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186260); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018626C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80186238; +extern u8 D_801862A8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80186238, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801862A8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801862C4[])(void); + +void func_801449C8(void *a0) { + D_801862C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801862CC[])(void); + +void func_80144A2C(void *a0) { + D_801862CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c b/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c index b28d21891..935ccbb12 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80186780; -extern u8 *D_80186784; -extern u8 *D_80186788; -extern u8 *D_8018678C; -extern u8 *D_80186790; -extern u16 *D_80186794[]; -extern u16 *D_8018679C[]; -extern u16 *D_801867BC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80186780; - iVar2 = func_80028D58(); - puVar3 = D_80186794[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80186784; - iVar2 = func_80028DE0(); - puVar3 = D_80186794[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80186788 + 0x18) = *D_8018679C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018678C + 0x18) = *D_8018679C[iVar2]; - - puVar1 = D_80186790; - iVar2 = func_80028D9C(); - puVar3 = D_801867BC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801866BC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801866BC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801866CC; -extern char *D_801866EC; -extern char *D_801866F0; -extern char *D_801866F4; -extern char *D_801866F8; -extern char *D_801866FC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801866CC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801866EC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801866F0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801866F4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801866F8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801866FC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80186586; -extern unsigned short D_8018658A; -extern unsigned short D_8018658E; -extern unsigned short D_80186592; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80186586; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018658A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018658E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80186592; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186B1C[])(void); - -void func_80141788(void) -{ - D_80186B1C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186B28[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186B28[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186AA0; -extern s16 D_80186AA2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186740; - extern u8 D_80186758; - extern u8 D_801867CC; - extern u8 D_801867D4; - extern void *D_801ABC58; - extern void *D_801ABC5C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801ABC58 = &D_80186740; - D_801ABC5C = &D_801867CC; - } else { - D_801ABC58 = &D_80186758; - D_801ABC5C = &D_801867D4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186AA0 = 0xE; - D_80186AA2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186AA4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186AA4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186AA4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186A7C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186A7C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186B4C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186B4C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186B5C[])(void); - -void func_801425CC(void *a0) { - D_80186B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186B40; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186B40); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186B70[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186B70[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186B8C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186B8C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186D5C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186D5C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186E14[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186E14[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801AB1B4; -extern u8 D_801ABC60; -extern u8 D_801ABC61; -extern u8 D_801ABC62; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801AB1B4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801ABC60 = mul * (local.b[0] >> 4); - D_801ABC61 = mul * (local.b[1] >> 4); - D_801ABC62 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80186B64; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186B64); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186B80[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186B80); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80186D4C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80186D4C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186D6C[]; -extern unsigned char D_80186DCC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186D6C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80186DCC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801AB1B0; -extern u8 D_801ABC60; -extern u8 D_801ABC64; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801AB1B0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801ABC60); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801ABC60, 0x10); - memcpy(&D_801ABC64, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80186F24[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80186F24[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018704C[])(void); - -void func_80143B30(void *a0) { - D_8018704C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80187058[])(void); - -void func_80143C38(void *a0) { - D_80187058[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80187060[])(void); - -void func_80143C98(void *a0) { - D_80187060[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80143D28); - - -extern void (*D_801870A8[])(void); - -void func_80143E68(void *a0) { - D_801870A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801870BC[])(void); - -void func_80144054(void *a0) { - D_801870BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801870C4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801870C4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80187040; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80187040, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80187054; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187054 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187054 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80187068; -extern u8 D_80187074; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187068); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187074); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80187040; -extern u8 D_801870B0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80187040, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801870B0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801870CC[])(void); - -void func_801449C8(void *a0) { - D_801870CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801870D4[])(void); - -void func_80144A2C(void *a0) { - D_801870D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_112/ov_SC03_112_jr_80140608.c b/src/ov_SC03_112/ov_SC03_112_jr_80140608.c new file mode 100644 index 000000000..af9911ad9 --- /dev/null +++ b/src/ov_SC03_112/ov_SC03_112_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AA824; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801859C0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801ABB14; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AD0E0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AA824; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801856FC)(); +extern s16 (*D_80185700)(); +extern M2C_UNK (*D_80185708)(); +extern s32 (*D_8018570C)(); +extern s32 D_801ABB10; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AA828; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80185A54; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80188F38; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185A6C; +extern M2C_UNK D_80185A74; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185A7C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185A98[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185AA4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185AB8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185B08[]; +extern s16 D_80185B38[]; +extern s16 D_80185B98[]; +extern s16 D_80185BA0[]; +extern s16 D_80185BC0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80185BF8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185C50[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185C98[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185CA0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80185CA8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80185CB0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80185C58; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80185C78; +extern void func_801321B0(int param_1); +extern int D_80185C88; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801ABB80; +extern s32 D_801ABB84[]; +extern int D_801ABB88; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185CBC; +extern u8 D_80185CB8; +extern s16 *D_80185CC0; +extern u8 D_80185CC4; +extern int D_801ABB80; +extern u16 D_801ABB90; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80185CC0; /* holds a pointer value (*(u16**)&D_80185CC0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80185CD4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185D28; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185D2C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80185D70; +extern u8 D_80185DB4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80185DF8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185E70, D_80185E72, D_80185E74, D_80185E76, D_80185E78, D_80185E7A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801ABBF8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801ABBFC; +extern s8 D_801ABBFD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801ABC1C; +extern s32 D_801ABC10; +extern s32 D_801ABC14; +extern s32 D_801ABC20; +extern void func_8013CABC(void); +extern s32 D_801ABC18; +extern void func_8013CAE8(void); +extern s32 D_801ABC48; +extern s32 D_801ABC4C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801ABC28; +extern s32 D_801ABC2C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AD0DA; +extern u8 D_801AD14E; +extern u8 D_801AD002; +extern u8 D_801AD0BC; +extern u8 D_801ACFE0; +extern u8 D_801AD001; +extern s32 D_801AD0C0; +extern void func_8013D330(void); +extern void *D_801ABC00; +extern void *D_801ABC04; +extern void *D_801ABC08; +extern s32 D_801ABC30; +extern s32 D_801ABC34; +extern s32 D_801ABC38; +extern s32 D_801AD034[]; +extern u8 D_80185F68[]; +extern u8 D_80186010[]; +extern u8 D_80185EC0[]; +extern u8 D_80185FBC[]; +extern u8 D_8018603C[]; +extern u8 D_80185F14[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801ABC0C; +extern s32 D_801ABC3C; +extern s32 D_801ABC40; +extern s32 D_801ABC44; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801ABC24; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80186AC8; +extern s32 D_80115188; +extern s16 D_80186AA0; +extern s16 D_80186AA2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186AA4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80186780; +extern u8 *D_80186784; +extern u8 *D_80186788; +extern u8 *D_8018678C; +extern u8 *D_80186790; +extern u16 *D_80186794[]; +extern u16 *D_8018679C[]; +extern u16 *D_801867BC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80186780; + iVar2 = func_80028D58(); + puVar3 = D_80186794[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80186784; + iVar2 = func_80028DE0(); + puVar3 = D_80186794[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80186788 + 0x18) = *D_8018679C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018678C + 0x18) = *D_8018679C[iVar2]; + + puVar1 = D_80186790; + iVar2 = func_80028D9C(); + puVar3 = D_801867BC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801866BC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801866BC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801866CC; +extern char *D_801866EC; +extern char *D_801866F0; +extern char *D_801866F4; +extern char *D_801866F8; +extern char *D_801866FC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801866CC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801866EC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801866F0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801866F4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801866F8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801866FC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80186586; +extern unsigned short D_8018658A; +extern unsigned short D_8018658E; +extern unsigned short D_80186592; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80186586; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018658A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018658E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80186592; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186B1C[])(void); + +void func_80141788(void) +{ + D_80186B1C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186B28[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186B28[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186AA0; +extern s16 D_80186AA2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186740; + extern u8 D_80186758; + extern u8 D_801867CC; + extern u8 D_801867D4; + extern void *D_801ABC58; + extern void *D_801ABC5C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801ABC58 = &D_80186740; + D_801ABC5C = &D_801867CC; + } else { + D_801ABC58 = &D_80186758; + D_801ABC5C = &D_801867D4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186AA0 = 0xE; + D_80186AA2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186AA4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186AA4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186AA4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186A7C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186A7C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186B4C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186B4C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186B5C[])(void); + +void func_801425CC(void *a0) { + D_80186B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186B40; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186B40); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186B70[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186B70[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186B8C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186B8C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186D5C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186D5C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186E14[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186E14[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801AB1B4; +extern u8 D_801ABC60; +extern u8 D_801ABC61; +extern u8 D_801ABC62; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801AB1B4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801ABC60 = mul * (local.b[0] >> 4); + D_801ABC61 = mul * (local.b[1] >> 4); + D_801ABC62 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80186B64; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186B64); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186B80[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186B80); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80186D4C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80186D4C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186D6C[]; +extern unsigned char D_80186DCC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186D6C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80186DCC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801AB1B0; +extern u8 D_801ABC60; +extern u8 D_801ABC64; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801AB1B0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801ABC60); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801ABC60, 0x10); + memcpy(&D_801ABC64, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80186F24[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80186F24[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018704C[])(void); + +void func_80143B30(void *a0) { + D_8018704C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80187058[])(void); + +void func_80143C38(void *a0) { + D_80187058[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80187060[])(void); + +void func_80143C98(void *a0) { + D_80187060[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80143D28); + + +extern void (*D_801870A8[])(void); + +void func_80143E68(void *a0) { + D_801870A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801870BC[])(void); + +void func_80144054(void *a0) { + D_801870BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801870C4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801870C4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187040; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80187040, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80187054; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187054 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187054 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80187068; +extern u8 D_80187074; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187068); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187074); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80187040; +extern u8 D_801870B0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80187040, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801870B0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801870CC[])(void); + +void func_801449C8(void *a0) { + D_801870CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801870D4[])(void); + +void func_80144A2C(void *a0) { + D_801870D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c b/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c index 8cf27aee9..20818d86e 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80183E30; -extern u8 *D_80183E34; -extern u8 *D_80183E38; -extern u8 *D_80183E3C; -extern u8 *D_80183E40; -extern u16 *D_80183E44[]; -extern u16 *D_80183E4C[]; -extern u16 *D_80183E6C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183E30; - iVar2 = func_80028D58(); - puVar3 = D_80183E44[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80183E34; - iVar2 = func_80028DE0(); - puVar3 = D_80183E44[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80183E38 + 0x18) = *D_80183E4C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80183E3C + 0x18) = *D_80183E4C[iVar2]; - - puVar1 = D_80183E40; - iVar2 = func_80028D9C(); - puVar3 = D_80183E6C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183D6C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183D6C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183D7C; -extern char *D_80183D9C; -extern char *D_80183DA0; -extern char *D_80183DA4; -extern char *D_80183DA8; -extern char *D_80183DAC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183D7C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183D9C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183DA0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183DA4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183DA8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183DAC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80183C36; -extern unsigned short D_80183C3A; -extern unsigned short D_80183C3E; -extern unsigned short D_80183C42; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80183C36; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80183C3A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80183C3E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80183C42; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801841CC[])(void); - -void func_80141788(void) -{ - D_801841CC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801841D8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801841D8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80184150; -extern s16 D_80184152; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80183DF0; - extern u8 D_80183E08; - extern u8 D_80183E7C; - extern u8 D_80183E84; - extern void *D_801A47E8; - extern void *D_801A47EC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A47E8 = &D_80183DF0; - D_801A47EC = &D_80183E7C; - } else { - D_801A47E8 = &D_80183E08; - D_801A47EC = &D_80183E84; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80184150 = 0xE; - D_80184152 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80184154: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80184154; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80184154); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018412C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018412C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801841FC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801841FC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018420C[])(void); - -void func_801425CC(void *a0) { - D_8018420C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801841F0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801841F0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184220[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184220[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018423C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018423C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018440C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018440C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801844C4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801844C4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A3E3C; -extern u8 D_801A47F0; -extern u8 D_801A47F1; -extern u8 D_801A47F2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A3E3C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A47F0 = mul * (local.b[0] >> 4); - D_801A47F1 = mul * (local.b[1] >> 4); - D_801A47F2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80184214; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184214); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184230[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184230); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801843FC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801843FC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018441C[]; -extern unsigned char D_8018447C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018441C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018447C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A3E38; -extern u8 D_801A47F0; -extern u8 D_801A47F4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A3E38, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A47F0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A47F0, 0x10); - memcpy(&D_801A47F4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801845D4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801845D4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801846FC[])(void); - -void func_80143B30(void *a0) { - D_801846FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80184708[])(void); - -void func_80143C38(void *a0) { - D_80184708[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80184710[])(void); - -void func_80143C98(void *a0) { - D_80184710[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80143D28); - - -extern void (*D_80184758[])(void); - -void func_80143E68(void *a0) { - D_80184758[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018476C[])(void); - -void func_80144054(void *a0) { - D_8018476C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184774[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184774[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801846F0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801846F0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80184704; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184704 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184704 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80184718; -extern u8 D_80184724; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184718); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184724); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801846F0; -extern u8 D_80184760; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801846F0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184760, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018477C[])(void); - -void func_801449C8(void *a0) { - D_8018477C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184784[])(void); - -void func_80144A2C(void *a0) { - D_80184784[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_113/ov_SC03_113_jr_80140608.c b/src/ov_SC03_113/ov_SC03_113_jr_80140608.c new file mode 100644 index 000000000..9206f3ba9 --- /dev/null +++ b/src/ov_SC03_113/ov_SC03_113_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A34AC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80183070[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A46A4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A5C80; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A34AC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182DAC)(); +extern s16 (*D_80182DB0)(); +extern M2C_UNK (*D_80182DB8)(); +extern s32 (*D_80182DBC)(); +extern s32 D_801A46A0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A34B0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80183104; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801865E8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018311C; +extern M2C_UNK D_80183124; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018312C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80183148[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80183154[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80183168[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801831B8[]; +extern s16 D_801831E8[]; +extern s16 D_80183248[]; +extern s16 D_80183250[]; +extern s16 D_80183270[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801832A8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80183300[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80183348[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80183350[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80183358[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80183360[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80183308; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80183328; +extern void func_801321B0(int param_1); +extern int D_80183338; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A4710; +extern s32 D_801A4714[]; +extern int D_801A4718; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018336C; +extern u8 D_80183368; +extern s16 *D_80183370; +extern u8 D_80183374; +extern int D_801A4710; +extern u16 D_801A4720; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80183370; /* holds a pointer value (*(u16**)&D_80183370) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80183384[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801833D8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801833DC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80183420; +extern u8 D_80183464; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801834A8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80183520, D_80183522, D_80183524, D_80183526, D_80183528, D_8018352A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A4788; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A478C; +extern s8 D_801A478D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A47AC; +extern s32 D_801A47A0; +extern s32 D_801A47A4; +extern s32 D_801A47B0; +extern void func_8013CABC(void); +extern s32 D_801A47A8; +extern void func_8013CAE8(void); +extern s32 D_801A47D8; +extern s32 D_801A47DC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A47B8; +extern s32 D_801A47BC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A5C7A; +extern u8 D_801A5CEE; +extern u8 D_801A5BA2; +extern u8 D_801A5C5C; +extern u8 D_801A5B80; +extern u8 D_801A5BA1; +extern s32 D_801A5C60; +extern void func_8013D330(void); +extern void *D_801A4790; +extern void *D_801A4794; +extern void *D_801A4798; +extern s32 D_801A47C0; +extern s32 D_801A47C4; +extern s32 D_801A47C8; +extern s32 D_801A5BD4[]; +extern u8 D_80183618[]; +extern u8 D_801836C0[]; +extern u8 D_80183570[]; +extern u8 D_8018366C[]; +extern u8 D_801836EC[]; +extern u8 D_801835C4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A479C; +extern s32 D_801A47CC; +extern s32 D_801A47D0; +extern s32 D_801A47D4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A47B4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80184178; +extern s32 D_80115188; +extern s16 D_80184150; +extern s16 D_80184152; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80184154; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80183E30; +extern u8 *D_80183E34; +extern u8 *D_80183E38; +extern u8 *D_80183E3C; +extern u8 *D_80183E40; +extern u16 *D_80183E44[]; +extern u16 *D_80183E4C[]; +extern u16 *D_80183E6C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183E30; + iVar2 = func_80028D58(); + puVar3 = D_80183E44[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80183E34; + iVar2 = func_80028DE0(); + puVar3 = D_80183E44[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80183E38 + 0x18) = *D_80183E4C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80183E3C + 0x18) = *D_80183E4C[iVar2]; + + puVar1 = D_80183E40; + iVar2 = func_80028D9C(); + puVar3 = D_80183E6C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183D6C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183D6C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183D7C; +extern char *D_80183D9C; +extern char *D_80183DA0; +extern char *D_80183DA4; +extern char *D_80183DA8; +extern char *D_80183DAC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183D7C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183D9C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183DA0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183DA4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183DA8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183DAC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80183C36; +extern unsigned short D_80183C3A; +extern unsigned short D_80183C3E; +extern unsigned short D_80183C42; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80183C36; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80183C3A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80183C3E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80183C42; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801841CC[])(void); + +void func_80141788(void) +{ + D_801841CC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801841D8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801841D8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80184150; +extern s16 D_80184152; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80183DF0; + extern u8 D_80183E08; + extern u8 D_80183E7C; + extern u8 D_80183E84; + extern void *D_801A47E8; + extern void *D_801A47EC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A47E8 = &D_80183DF0; + D_801A47EC = &D_80183E7C; + } else { + D_801A47E8 = &D_80183E08; + D_801A47EC = &D_80183E84; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80184150 = 0xE; + D_80184152 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80184154: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80184154; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80184154); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018412C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018412C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801841FC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801841FC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018420C[])(void); + +void func_801425CC(void *a0) { + D_8018420C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801841F0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801841F0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184220[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184220[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018423C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018423C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018440C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018440C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801844C4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801844C4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A3E3C; +extern u8 D_801A47F0; +extern u8 D_801A47F1; +extern u8 D_801A47F2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A3E3C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A47F0 = mul * (local.b[0] >> 4); + D_801A47F1 = mul * (local.b[1] >> 4); + D_801A47F2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80184214; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184214); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184230[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184230); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801843FC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801843FC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018441C[]; +extern unsigned char D_8018447C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018441C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018447C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A3E38; +extern u8 D_801A47F0; +extern u8 D_801A47F4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A3E38, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A47F0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A47F0, 0x10); + memcpy(&D_801A47F4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801845D4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801845D4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801846FC[])(void); + +void func_80143B30(void *a0) { + D_801846FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80184708[])(void); + +void func_80143C38(void *a0) { + D_80184708[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80184710[])(void); + +void func_80143C98(void *a0) { + D_80184710[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80143D28); + + +extern void (*D_80184758[])(void); + +void func_80143E68(void *a0) { + D_80184758[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018476C[])(void); + +void func_80144054(void *a0) { + D_8018476C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184774[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184774[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801846F0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801846F0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80184704; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184704 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184704 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80184718; +extern u8 D_80184724; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184718); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184724); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801846F0; +extern u8 D_80184760; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801846F0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184760, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018477C[])(void); + +void func_801449C8(void *a0) { + D_8018477C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184784[])(void); + +void func_80144A2C(void *a0) { + D_80184784[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c b/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c index 4c42c4ba0..94e6bb948 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FA98; -extern u8 *D_8017FA9C; -extern u8 *D_8017FAA0; -extern u8 *D_8017FAA4; -extern u8 *D_8017FAA8; -extern u16 *D_8017FAAC[]; -extern u16 *D_8017FAB4[]; -extern u16 *D_8017FAD4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FA98; - iVar2 = func_80028D58(); - puVar3 = D_8017FAAC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FA9C; - iVar2 = func_80028DE0(); - puVar3 = D_8017FAAC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FAA0 + 0x18) = *D_8017FAB4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FAA4 + 0x18) = *D_8017FAB4[iVar2]; - - puVar1 = D_8017FAA8; - iVar2 = func_80028D9C(); - puVar3 = D_8017FAD4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F9D4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F9D4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F9E4; -extern char *D_8017FA04; -extern char *D_8017FA08; -extern char *D_8017FA0C; -extern char *D_8017FA10; -extern char *D_8017FA14; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F9E4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FA04; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA08; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA0C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA10; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA14; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F89E; -extern unsigned short D_8017F8A2; -extern unsigned short D_8017F8A6; -extern unsigned short D_8017F8AA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F89E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F8A2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F8A6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F8AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017FE34[])(void); - -void func_80141788(void) -{ - D_8017FE34[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017FE40[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FE40[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017FDB8; -extern s16 D_8017FDBA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017FA58; - extern u8 D_8017FA70; - extern u8 D_8017FAE4; - extern u8 D_8017FAEC; - extern void *D_801A8480; - extern void *D_801A8484; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A8480 = &D_8017FA58; - D_801A8484 = &D_8017FAE4; - } else { - D_801A8480 = &D_8017FA70; - D_801A8484 = &D_8017FAEC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017FDB8 = 0xE; - D_8017FDBA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017FDBC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017FDBC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017FDBC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017FD94; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017FD94 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FE64[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FE64[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017FE74[])(void); - -void func_801425CC(void *a0) { - D_8017FE74[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FE58; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FE58); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FE88[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FE88[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FEA4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FEA4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180074[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180074[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018012C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018012C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A7B48; -extern u8 D_801A8488; -extern u8 D_801A8489; -extern u8 D_801A848A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A7B48; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A8488 = mul * (local.b[0] >> 4); - D_801A8489 = mul * (local.b[1] >> 4); - D_801A848A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017FE7C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FE7C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FE98[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FE98); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80180064[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80180064[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180084[]; -extern unsigned char D_801800E4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180084); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801800E4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A7B44; -extern u8 D_801A8488; -extern u8 D_801A848C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A7B44, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A8488); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A8488, 0x10); - memcpy(&D_801A848C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018023C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018023C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180364[])(void); - -void func_80143B30(void *a0) { - D_80180364[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180370[])(void); - -void func_80143C38(void *a0) { - D_80180370[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180378[])(void); - -void func_80143C98(void *a0) { - D_80180378[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80143D28); - - -extern void (*D_801803C0[])(void); - -void func_80143E68(void *a0) { - D_801803C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801803D4[])(void); - -void func_80144054(void *a0) { - D_801803D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801803DC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801803DC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180358; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180358, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018036C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018036C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018036C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180380; -extern u8 D_8018038C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180380); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018038C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180358; -extern u8 D_801803C8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180358, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801803C8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801803E4[])(void); - -void func_801449C8(void *a0) { - D_801803E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801803EC[])(void); - -void func_80144A2C(void *a0) { - D_801803EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_114/ov_SC03_114_jr_80140608.c b/src/ov_SC03_114/ov_SC03_114_jr_80140608.c new file mode 100644 index 000000000..aa328de7b --- /dev/null +++ b/src/ov_SC03_114/ov_SC03_114_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A71B8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017ECD8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A833C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A97F8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A71B8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EA14)(); +extern s16 (*D_8017EA18)(); +extern M2C_UNK (*D_8017EA20)(); +extern s32 (*D_8017EA24)(); +extern s32 D_801A8338; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A71BC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017ED6C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182250; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017ED84; +extern M2C_UNK D_8017ED8C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017ED94; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017EDB0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017EDBC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017EDD0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017EE20[]; +extern s16 D_8017EE50[]; +extern s16 D_8017EEB0[]; +extern s16 D_8017EEB8[]; +extern s16 D_8017EED8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017EF10[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017EF68[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017EFB0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017EFB8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017EFC0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017EFC8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017EF70; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017EF90; +extern void func_801321B0(int param_1); +extern int D_8017EFA0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A83A8; +extern s32 D_801A83AC[]; +extern int D_801A83B0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017EFD4; +extern u8 D_8017EFD0; +extern s16 *D_8017EFD8; +extern u8 D_8017EFDC; +extern int D_801A83A8; +extern u16 D_801A83B8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017EFD8; /* holds a pointer value (*(u16**)&D_8017EFD8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017EFEC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F040; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F044[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F088; +extern u8 D_8017F0CC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F110[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F188, D_8017F18A, D_8017F18C, D_8017F18E, D_8017F190, D_8017F192; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A8420; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A8424; +extern s8 D_801A8425; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A8444; +extern s32 D_801A8438; +extern s32 D_801A843C; +extern s32 D_801A8448; +extern void func_8013CABC(void); +extern s32 D_801A8440; +extern void func_8013CAE8(void); +extern s32 D_801A8470; +extern s32 D_801A8474; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A8450; +extern s32 D_801A8454; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A97F2; +extern u8 D_801A9866; +extern u8 D_801A971A; +extern u8 D_801A97D4; +extern u8 D_801A96F8; +extern u8 D_801A9719; +extern s32 D_801A97D8; +extern void func_8013D330(void); +extern void *D_801A8428; +extern void *D_801A842C; +extern void *D_801A8430; +extern s32 D_801A8458; +extern s32 D_801A845C; +extern s32 D_801A8460; +extern s32 D_801A974C[]; +extern u8 D_8017F280[]; +extern u8 D_8017F328[]; +extern u8 D_8017F1D8[]; +extern u8 D_8017F2D4[]; +extern u8 D_8017F354[]; +extern u8 D_8017F22C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A8434; +extern s32 D_801A8464; +extern s32 D_801A8468; +extern s32 D_801A846C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A844C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017FDE0; +extern s32 D_80115188; +extern s16 D_8017FDB8; +extern s16 D_8017FDBA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017FDBC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FA98; +extern u8 *D_8017FA9C; +extern u8 *D_8017FAA0; +extern u8 *D_8017FAA4; +extern u8 *D_8017FAA8; +extern u16 *D_8017FAAC[]; +extern u16 *D_8017FAB4[]; +extern u16 *D_8017FAD4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FA98; + iVar2 = func_80028D58(); + puVar3 = D_8017FAAC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FA9C; + iVar2 = func_80028DE0(); + puVar3 = D_8017FAAC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FAA0 + 0x18) = *D_8017FAB4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FAA4 + 0x18) = *D_8017FAB4[iVar2]; + + puVar1 = D_8017FAA8; + iVar2 = func_80028D9C(); + puVar3 = D_8017FAD4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F9D4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F9D4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F9E4; +extern char *D_8017FA04; +extern char *D_8017FA08; +extern char *D_8017FA0C; +extern char *D_8017FA10; +extern char *D_8017FA14; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F9E4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FA04; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA08; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA0C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA10; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA14; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F89E; +extern unsigned short D_8017F8A2; +extern unsigned short D_8017F8A6; +extern unsigned short D_8017F8AA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F89E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F8A2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F8A6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F8AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017FE34[])(void); + +void func_80141788(void) +{ + D_8017FE34[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017FE40[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FE40[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017FDB8; +extern s16 D_8017FDBA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017FA58; + extern u8 D_8017FA70; + extern u8 D_8017FAE4; + extern u8 D_8017FAEC; + extern void *D_801A8480; + extern void *D_801A8484; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A8480 = &D_8017FA58; + D_801A8484 = &D_8017FAE4; + } else { + D_801A8480 = &D_8017FA70; + D_801A8484 = &D_8017FAEC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017FDB8 = 0xE; + D_8017FDBA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017FDBC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017FDBC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017FDBC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017FD94; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017FD94 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FE64[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FE64[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017FE74[])(void); + +void func_801425CC(void *a0) { + D_8017FE74[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FE58; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FE58); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FE88[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FE88[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FEA4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FEA4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180074[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180074[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018012C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018012C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A7B48; +extern u8 D_801A8488; +extern u8 D_801A8489; +extern u8 D_801A848A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A7B48; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A8488 = mul * (local.b[0] >> 4); + D_801A8489 = mul * (local.b[1] >> 4); + D_801A848A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017FE7C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FE7C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FE98[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FE98); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80180064[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80180064[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180084[]; +extern unsigned char D_801800E4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180084); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801800E4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A7B44; +extern u8 D_801A8488; +extern u8 D_801A848C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A7B44, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A8488); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A8488, 0x10); + memcpy(&D_801A848C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018023C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018023C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180364[])(void); + +void func_80143B30(void *a0) { + D_80180364[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180370[])(void); + +void func_80143C38(void *a0) { + D_80180370[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180378[])(void); + +void func_80143C98(void *a0) { + D_80180378[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80143D28); + + +extern void (*D_801803C0[])(void); + +void func_80143E68(void *a0) { + D_801803C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801803D4[])(void); + +void func_80144054(void *a0) { + D_801803D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801803DC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801803DC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180358; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180358, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018036C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018036C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018036C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180380; +extern u8 D_8018038C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180380); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018038C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180358; +extern u8 D_801803C8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180358, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801803C8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801803E4[])(void); + +void func_801449C8(void *a0) { + D_801803E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801803EC[])(void); + +void func_80144A2C(void *a0) { + D_801803EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c b/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c index d82fddeb4..0059927f4 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181504; -extern u8 *D_80181508; -extern u8 *D_8018150C; -extern u8 *D_80181510; -extern u8 *D_80181514; -extern u16 *D_80181518[]; -extern u16 *D_80181520[]; -extern u16 *D_80181540[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181504; - iVar2 = func_80028D58(); - puVar3 = D_80181518[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181508; - iVar2 = func_80028DE0(); - puVar3 = D_80181518[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018150C + 0x18) = *D_80181520[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80181510 + 0x18) = *D_80181520[iVar2]; - - puVar1 = D_80181514; - iVar2 = func_80028D9C(); - puVar3 = D_80181540[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80181440; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80181440); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80181450; -extern char *D_80181470; -extern char *D_80181474; -extern char *D_80181478; -extern char *D_8018147C; -extern char *D_80181480; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80181450); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80181470; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181474; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181478; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018147C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181480; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018130A; -extern unsigned short D_8018130E; -extern unsigned short D_80181312; -extern unsigned short D_80181316; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018130A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018130E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181312; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181316; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801818A0[])(void); - -void func_80141788(void) -{ - D_801818A0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801818AC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801818AC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80181824; -extern s16 D_80181826; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801814C4; - extern u8 D_801814DC; - extern u8 D_80181550; - extern u8 D_80181558; - extern void *D_80193DD8; - extern void *D_80193DDC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80193DD8 = &D_801814C4; - D_80193DDC = &D_80181550; - } else { - D_80193DD8 = &D_801814DC; - D_80193DDC = &D_80181558; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80181824 = 0xE; - D_80181826 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80181828: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80181828; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80181828); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80181800; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80181800 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801818D0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801818D0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801818E0[])(void); - -void func_801425CC(void *a0) { - D_801818E0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801818C4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801818C4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801818F4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801818F4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181910[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181910[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181AE0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181AE0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181B98[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181B98[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801934BC; -extern u8 D_80193DE0; -extern u8 D_80193DE1; -extern u8 D_80193DE2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801934BC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80193DE0 = mul * (local.b[0] >> 4); - D_80193DE1 = mul * (local.b[1] >> 4); - D_80193DE2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801818E8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801818E8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181904[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181904); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80181AD0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80181AD0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181AF0[]; -extern unsigned char D_80181B50[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181AF0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80181B50); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801934B8; -extern u8 D_80193DE0; -extern u8 D_80193DE4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801934B8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80193DE0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80193DE0, 0x10); - memcpy(&D_80193DE4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80181CA8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80181CA8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80181DD0[])(void); - -void func_80143B30(void *a0) { - D_80181DD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80181DDC[])(void); - -void func_80143C38(void *a0) { - D_80181DDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80181DE4[])(void); - -void func_80143C98(void *a0) { - D_80181DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80143D28); - - -extern void (*D_80181E2C[])(void); - -void func_80143E68(void *a0) { - D_80181E2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80181E40[])(void); - -void func_80144054(void *a0) { - D_80181E40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80181E48[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80181E48[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80181DC4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80181DC4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80181DD8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181DD8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181DD8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80181DEC; -extern u8 D_80181DF8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181DEC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181DF8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80181DC4; -extern u8 D_80181E34; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80181DC4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80181E34, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80181E50[])(void); - -void func_801449C8(void *a0) { - D_80181E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80181E58[])(void); - -void func_80144A2C(void *a0) { - D_80181E58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_115/ov_SC03_115_jr_80140608.c b/src/ov_SC03_115/ov_SC03_115_jr_80140608.c new file mode 100644 index 000000000..780531aeb --- /dev/null +++ b/src/ov_SC03_115/ov_SC03_115_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80192B2C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80180744[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80193C94; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801950D0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80192B2C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80180480)(); +extern s16 (*D_80180484)(); +extern M2C_UNK (*D_8018048C)(); +extern s32 (*D_80180490)(); +extern s32 D_80193C90; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80192B30; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801807D8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80183CBC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801807F0; +extern M2C_UNK D_801807F8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80180800; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018081C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80180828[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018083C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018088C[]; +extern s16 D_801808BC[]; +extern s16 D_8018091C[]; +extern s16 D_80180924[]; +extern s16 D_80180944[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018097C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801809D4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80180A1C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80180A24[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80180A2C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80180A34[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801809DC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801809FC; +extern void func_801321B0(int param_1); +extern int D_80180A0C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80193D00; +extern s32 D_80193D04[]; +extern int D_80193D08; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80180A40; +extern u8 D_80180A3C; +extern s16 *D_80180A44; +extern u8 D_80180A48; +extern int D_80193D00; +extern u16 D_80193D10; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80180A44; /* holds a pointer value (*(u16**)&D_80180A44) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80180A58[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80180AAC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80180AB0[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80180AF4; +extern u8 D_80180B38; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80180B7C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80180BF4, D_80180BF6, D_80180BF8, D_80180BFA, D_80180BFC, D_80180BFE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80193D78; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80193D7C; +extern s8 D_80193D7D; +extern void func_8013C9C4(void * arg0); +extern s32 D_80193D9C; +extern s32 D_80193D90; +extern s32 D_80193D94; +extern s32 D_80193DA0; +extern void func_8013CABC(void); +extern s32 D_80193D98; +extern void func_8013CAE8(void); +extern s32 D_80193DC8; +extern s32 D_80193DCC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80193DA8; +extern s32 D_80193DAC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801950CA; +extern u8 D_8019513E; +extern u8 D_80194FF2; +extern u8 D_801950AC; +extern u8 D_80194FD0; +extern u8 D_80194FF1; +extern s32 D_801950B0; +extern void func_8013D330(void); +extern void *D_80193D80; +extern void *D_80193D84; +extern void *D_80193D88; +extern s32 D_80193DB0; +extern s32 D_80193DB4; +extern s32 D_80193DB8; +extern s32 D_80195024[]; +extern u8 D_80180CEC[]; +extern u8 D_80180D94[]; +extern u8 D_80180C44[]; +extern u8 D_80180D40[]; +extern u8 D_80180DC0[]; +extern u8 D_80180C98[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80193D8C; +extern s32 D_80193DBC; +extern s32 D_80193DC0; +extern s32 D_80193DC4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80193DA4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018184C; +extern s32 D_80115188; +extern s16 D_80181824; +extern s16 D_80181826; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80181828; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181504; +extern u8 *D_80181508; +extern u8 *D_8018150C; +extern u8 *D_80181510; +extern u8 *D_80181514; +extern u16 *D_80181518[]; +extern u16 *D_80181520[]; +extern u16 *D_80181540[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181504; + iVar2 = func_80028D58(); + puVar3 = D_80181518[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181508; + iVar2 = func_80028DE0(); + puVar3 = D_80181518[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018150C + 0x18) = *D_80181520[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80181510 + 0x18) = *D_80181520[iVar2]; + + puVar1 = D_80181514; + iVar2 = func_80028D9C(); + puVar3 = D_80181540[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80181440; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80181440); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80181450; +extern char *D_80181470; +extern char *D_80181474; +extern char *D_80181478; +extern char *D_8018147C; +extern char *D_80181480; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80181450); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80181470; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181474; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181478; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018147C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181480; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018130A; +extern unsigned short D_8018130E; +extern unsigned short D_80181312; +extern unsigned short D_80181316; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018130A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018130E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181312; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181316; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801818A0[])(void); + +void func_80141788(void) +{ + D_801818A0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801818AC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801818AC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80181824; +extern s16 D_80181826; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801814C4; + extern u8 D_801814DC; + extern u8 D_80181550; + extern u8 D_80181558; + extern void *D_80193DD8; + extern void *D_80193DDC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80193DD8 = &D_801814C4; + D_80193DDC = &D_80181550; + } else { + D_80193DD8 = &D_801814DC; + D_80193DDC = &D_80181558; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80181824 = 0xE; + D_80181826 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80181828: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80181828; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80181828); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80181800; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80181800 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801818D0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801818D0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801818E0[])(void); + +void func_801425CC(void *a0) { + D_801818E0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801818C4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801818C4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801818F4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801818F4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181910[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181910[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181AE0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181AE0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181B98[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181B98[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801934BC; +extern u8 D_80193DE0; +extern u8 D_80193DE1; +extern u8 D_80193DE2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801934BC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80193DE0 = mul * (local.b[0] >> 4); + D_80193DE1 = mul * (local.b[1] >> 4); + D_80193DE2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801818E8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801818E8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181904[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181904); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80181AD0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80181AD0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181AF0[]; +extern unsigned char D_80181B50[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181AF0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80181B50); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801934B8; +extern u8 D_80193DE0; +extern u8 D_80193DE4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801934B8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80193DE0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80193DE0, 0x10); + memcpy(&D_80193DE4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80181CA8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80181CA8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80181DD0[])(void); + +void func_80143B30(void *a0) { + D_80181DD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80181DDC[])(void); + +void func_80143C38(void *a0) { + D_80181DDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80181DE4[])(void); + +void func_80143C98(void *a0) { + D_80181DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80143D28); + + +extern void (*D_80181E2C[])(void); + +void func_80143E68(void *a0) { + D_80181E2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80181E40[])(void); + +void func_80144054(void *a0) { + D_80181E40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80181E48[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80181E48[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181DC4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80181DC4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80181DD8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181DD8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181DD8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80181DEC; +extern u8 D_80181DF8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181DEC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181DF8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80181DC4; +extern u8 D_80181E34; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80181DC4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80181E34, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80181E50[])(void); + +void func_801449C8(void *a0) { + D_80181E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80181E58[])(void); + +void func_80144A2C(void *a0) { + D_80181E58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c b/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c index 1d7652609..64ffe03a3 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80183908; -extern u8 *D_8018390C; -extern u8 *D_80183910; -extern u8 *D_80183914; -extern u8 *D_80183918; -extern u16 *D_8018391C[]; -extern u16 *D_80183924[]; -extern u16 *D_80183944[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183908; - iVar2 = func_80028D58(); - puVar3 = D_8018391C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018390C; - iVar2 = func_80028DE0(); - puVar3 = D_8018391C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80183910 + 0x18) = *D_80183924[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80183914 + 0x18) = *D_80183924[iVar2]; - - puVar1 = D_80183918; - iVar2 = func_80028D9C(); - puVar3 = D_80183944[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183844; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183844); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183854; -extern char *D_80183874; -extern char *D_80183878; -extern char *D_8018387C; -extern char *D_80183880; -extern char *D_80183884; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183854); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183874; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183878; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018387C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183880; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183884; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018370E; -extern unsigned short D_80183712; -extern unsigned short D_80183716; -extern unsigned short D_8018371A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018370E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80183712; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80183716; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018371A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183CA4[])(void); - -void func_80141788(void) -{ - D_80183CA4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183CB0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183CB0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80183C28; -extern s16 D_80183C2A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801838C8; - extern u8 D_801838E0; - extern u8 D_80183954; - extern u8 D_8018395C; - extern void *D_80196968; - extern void *D_8019696C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80196968 = &D_801838C8; - D_8019696C = &D_80183954; - } else { - D_80196968 = &D_801838E0; - D_8019696C = &D_8018395C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183C28 = 0xE; - D_80183C2A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80183C2C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80183C2C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80183C2C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80183C04; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80183C04 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183CD4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183CD4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80183CE4[])(void); - -void func_801425CC(void *a0) { - D_80183CE4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183CC8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183CC8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183CF8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183CF8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183D14[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183D14[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183EE4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183EE4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183F9C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183F9C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80196058; -extern u8 D_80196970; -extern u8 D_80196971; -extern u8 D_80196972; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80196058; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80196970 = mul * (local.b[0] >> 4); - D_80196971 = mul * (local.b[1] >> 4); - D_80196972 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80183CEC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183CEC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183D08[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183D08); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183ED4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183ED4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183EF4[]; -extern unsigned char D_80183F54[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183EF4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183F54); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80196054; -extern u8 D_80196970; -extern u8 D_80196974; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80196054, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80196970); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80196970, 0x10); - memcpy(&D_80196974, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801840AC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801840AC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801841D4[])(void); - -void func_80143B30(void *a0) { - D_801841D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801841E0[])(void); - -void func_80143C38(void *a0) { - D_801841E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801841E8[])(void); - -void func_80143C98(void *a0) { - D_801841E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80143D28); - - -extern void (*D_80184230[])(void); - -void func_80143E68(void *a0) { - D_80184230[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80184244[])(void); - -void func_80144054(void *a0) { - D_80184244[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018424C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018424C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801841C8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801841C8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801841DC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801841DC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801841DC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801841F0; -extern u8 D_801841FC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801841F0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801841FC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801841C8; -extern u8 D_80184238; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801841C8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184238, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80184254[])(void); - -void func_801449C8(void *a0) { - D_80184254[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018425C[])(void); - -void func_80144A2C(void *a0) { - D_8018425C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_116/ov_SC03_116_jr_80140608.c b/src/ov_SC03_116/ov_SC03_116_jr_80140608.c new file mode 100644 index 000000000..39d6b7926 --- /dev/null +++ b/src/ov_SC03_116/ov_SC03_116_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801956C8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182B48[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80196824; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80197CE0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801956C8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182884)(); +extern s16 (*D_80182888)(); +extern M2C_UNK (*D_80182890)(); +extern s32 (*D_80182894)(); +extern s32 D_80196820; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801956CC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80182BDC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801860C0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80182BF4; +extern M2C_UNK D_80182BFC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80182C04; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80182C20[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80182C2C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80182C40[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182C90[]; +extern s16 D_80182CC0[]; +extern s16 D_80182D20[]; +extern s16 D_80182D28[]; +extern s16 D_80182D48[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182D80[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182DD8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80182E20[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182E28[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182E30[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182E38[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182DE0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182E00; +extern void func_801321B0(int param_1); +extern int D_80182E10; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80196890; +extern s32 D_80196894[]; +extern int D_80196898; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182E44; +extern u8 D_80182E40; +extern s16 *D_80182E48; +extern u8 D_80182E4C; +extern int D_80196890; +extern u16 D_801968A0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182E48; /* holds a pointer value (*(u16**)&D_80182E48) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182E5C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182EB0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182EB4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80182EF8; +extern u8 D_80182F3C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182F80[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182FF8, D_80182FFA, D_80182FFC, D_80182FFE, D_80183000, D_80183002; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80196908; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019690C; +extern s8 D_8019690D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019692C; +extern s32 D_80196920; +extern s32 D_80196924; +extern s32 D_80196930; +extern void func_8013CABC(void); +extern s32 D_80196928; +extern void func_8013CAE8(void); +extern s32 D_80196958; +extern s32 D_8019695C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80196938; +extern s32 D_8019693C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_80197CDA; +extern u8 D_80197D4E; +extern u8 D_80197C02; +extern u8 D_80197CBC; +extern u8 D_80197BE0; +extern u8 D_80197C01; +extern s32 D_80197CC0; +extern void func_8013D330(void); +extern void *D_80196910; +extern void *D_80196914; +extern void *D_80196918; +extern s32 D_80196940; +extern s32 D_80196944; +extern s32 D_80196948; +extern s32 D_80197C34[]; +extern u8 D_801830F0[]; +extern u8 D_80183198[]; +extern u8 D_80183048[]; +extern u8 D_80183144[]; +extern u8 D_801831C4[]; +extern u8 D_8018309C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019691C; +extern s32 D_8019694C; +extern s32 D_80196950; +extern s32 D_80196954; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80196934; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183C50; +extern s32 D_80115188; +extern s16 D_80183C28; +extern s16 D_80183C2A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80183C2C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80183908; +extern u8 *D_8018390C; +extern u8 *D_80183910; +extern u8 *D_80183914; +extern u8 *D_80183918; +extern u16 *D_8018391C[]; +extern u16 *D_80183924[]; +extern u16 *D_80183944[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183908; + iVar2 = func_80028D58(); + puVar3 = D_8018391C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018390C; + iVar2 = func_80028DE0(); + puVar3 = D_8018391C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80183910 + 0x18) = *D_80183924[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80183914 + 0x18) = *D_80183924[iVar2]; + + puVar1 = D_80183918; + iVar2 = func_80028D9C(); + puVar3 = D_80183944[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183844; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183844); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183854; +extern char *D_80183874; +extern char *D_80183878; +extern char *D_8018387C; +extern char *D_80183880; +extern char *D_80183884; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183854); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183874; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183878; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018387C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183880; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183884; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018370E; +extern unsigned short D_80183712; +extern unsigned short D_80183716; +extern unsigned short D_8018371A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018370E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80183712; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80183716; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018371A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183CA4[])(void); + +void func_80141788(void) +{ + D_80183CA4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183CB0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183CB0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80183C28; +extern s16 D_80183C2A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801838C8; + extern u8 D_801838E0; + extern u8 D_80183954; + extern u8 D_8018395C; + extern void *D_80196968; + extern void *D_8019696C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80196968 = &D_801838C8; + D_8019696C = &D_80183954; + } else { + D_80196968 = &D_801838E0; + D_8019696C = &D_8018395C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183C28 = 0xE; + D_80183C2A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80183C2C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80183C2C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80183C2C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80183C04; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80183C04 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183CD4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183CD4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80183CE4[])(void); + +void func_801425CC(void *a0) { + D_80183CE4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183CC8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183CC8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183CF8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183CF8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183D14[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183D14[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183EE4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183EE4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183F9C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183F9C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80196058; +extern u8 D_80196970; +extern u8 D_80196971; +extern u8 D_80196972; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80196058; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80196970 = mul * (local.b[0] >> 4); + D_80196971 = mul * (local.b[1] >> 4); + D_80196972 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80183CEC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183CEC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183D08[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183D08); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183ED4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183ED4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183EF4[]; +extern unsigned char D_80183F54[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183EF4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183F54); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80196054; +extern u8 D_80196970; +extern u8 D_80196974; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80196054, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80196970); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80196970, 0x10); + memcpy(&D_80196974, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801840AC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801840AC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801841D4[])(void); + +void func_80143B30(void *a0) { + D_801841D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801841E0[])(void); + +void func_80143C38(void *a0) { + D_801841E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801841E8[])(void); + +void func_80143C98(void *a0) { + D_801841E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80143D28); + + +extern void (*D_80184230[])(void); + +void func_80143E68(void *a0) { + D_80184230[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80184244[])(void); + +void func_80144054(void *a0) { + D_80184244[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018424C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018424C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801841C8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801841C8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801841DC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801841DC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801841DC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801841F0; +extern u8 D_801841FC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801841F0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801841FC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801841C8; +extern u8 D_80184238; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801841C8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184238, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80184254[])(void); + +void func_801449C8(void *a0) { + D_80184254[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018425C[])(void); + +void func_80144A2C(void *a0) { + D_8018425C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c b/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c index 0f0c2bfcd..ab82d9b2d 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185914; -extern u8 *D_80185918; -extern u8 *D_8018591C; -extern u8 *D_80185920; -extern u8 *D_80185924; -extern u16 *D_80185928[]; -extern u16 *D_80185930[]; -extern u16 *D_80185950[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185914; - iVar2 = func_80028D58(); - puVar3 = D_80185928[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185918; - iVar2 = func_80028DE0(); - puVar3 = D_80185928[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018591C + 0x18) = *D_80185930[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185920 + 0x18) = *D_80185930[iVar2]; - - puVar1 = D_80185924; - iVar2 = func_80028D9C(); - puVar3 = D_80185950[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185850; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185850); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185860; -extern char *D_80185880; -extern char *D_80185884; -extern char *D_80185888; -extern char *D_8018588C; -extern char *D_80185890; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185860); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185880; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185884; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185888; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018588C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185890; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018571A; -extern unsigned short D_8018571E; -extern unsigned short D_80185722; -extern unsigned short D_80185726; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018571A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018571E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185722; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185726; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80185CB0[])(void); - -void func_80141788(void) -{ - D_80185CB0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80185CBC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80185CBC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80185C34; -extern s16 D_80185C36; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801858D4; - extern u8 D_801858EC; - extern u8 D_80185960; - extern u8 D_80185968; - extern void *D_801CD0E0; - extern void *D_801CD0E4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CD0E0 = &D_801858D4; - D_801CD0E4 = &D_80185960; - } else { - D_801CD0E0 = &D_801858EC; - D_801CD0E4 = &D_80185968; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80185C34 = 0xE; - D_80185C36 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80185C38: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80185C38; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80185C38); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185C10; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185C10 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80185CE0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80185CE0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80185CF0[])(void); - -void func_801425CC(void *a0) { - D_80185CF0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185CD4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185CD4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185D04[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185D04[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185D20[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185D20[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185EF0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185EF0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185FA8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185FA8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CC6F8; -extern u8 D_801CD0E8; -extern u8 D_801CD0E9; -extern u8 D_801CD0EA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CC6F8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CD0E8 = mul * (local.b[0] >> 4); - D_801CD0E9 = mul * (local.b[1] >> 4); - D_801CD0EA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80185CF8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185CF8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185D14[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185D14); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185EE0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185EE0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185F00[]; -extern unsigned char D_80185F60[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185F00); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185F60); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CC6F4; -extern u8 D_801CD0E8; -extern u8 D_801CD0EC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CC6F4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CD0E8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CD0E8, 0x10); - memcpy(&D_801CD0EC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801860B8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801860B8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801861E0[])(void); - -void func_80143B30(void *a0) { - D_801861E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801861EC[])(void); - -void func_80143C38(void *a0) { - D_801861EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801861F4[])(void); - -void func_80143C98(void *a0) { - D_801861F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018623C[])(void); - -void func_80143E68(void *a0) { - D_8018623C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186250[])(void); - -void func_80144054(void *a0) { - D_80186250[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80186258[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80186258[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801861D4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801861D4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801861E8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801861E8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801861E8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801861FC; -extern u8 D_80186208; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801861FC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186208); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801861D4; -extern u8 D_80186244; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801861D4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186244, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186260[])(void); - -void func_801449C8(void *a0) { - D_80186260[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186268[])(void); - -void func_80144A2C(void *a0) { - D_80186268[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_117/ov_SC03_117_jr_80140608.c b/src/ov_SC03_117/ov_SC03_117_jr_80140608.c new file mode 100644 index 000000000..cd1b1ff7d --- /dev/null +++ b/src/ov_SC03_117/ov_SC03_117_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CBD68; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184B54[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CCF9C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801CE8D8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CBD68; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184890)(); +extern s16 (*D_80184894)(); +extern M2C_UNK (*D_8018489C)(); +extern s32 (*D_801848A0)(); +extern s32 D_801CCF98; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CBD6C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80184BE8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801880CC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184C00; +extern M2C_UNK D_80184C08; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184C10; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80184C2C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80184C38[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80184C4C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80184C9C[]; +extern s16 D_80184CCC[]; +extern s16 D_80184D2C[]; +extern s16 D_80184D34[]; +extern s16 D_80184D54[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80184D8C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80184DE4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80184E2C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80184E34[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80184E3C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184E44[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80184DEC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80184E0C; +extern void func_801321B0(int param_1); +extern int D_80184E1C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CD008; +extern s32 D_801CD00C[]; +extern int D_801CD010; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184E50; +extern u8 D_80184E4C; +extern s16 *D_80184E54; +extern u8 D_80184E58; +extern int D_801CD008; +extern u16 D_801CD018; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184E54; /* holds a pointer value (*(u16**)&D_80184E54) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80184E68[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184EBC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184EC0[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184F04; +extern u8 D_80184F48; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184F8C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185004, D_80185006, D_80185008, D_8018500A, D_8018500C, D_8018500E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CD080; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CD084; +extern s8 D_801CD085; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CD0A4; +extern s32 D_801CD098; +extern s32 D_801CD09C; +extern s32 D_801CD0A8; +extern void func_8013CABC(void); +extern s32 D_801CD0A0; +extern void func_8013CAE8(void); +extern s32 D_801CD0D0; +extern s32 D_801CD0D4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CD0B0; +extern s32 D_801CD0B4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801CE8D2; +extern u8 D_801CE946; +extern u8 D_801CE7FA; +extern u8 D_801CE8B4; +extern u8 D_801CE7D8; +extern u8 D_801CE7F9; +extern s32 D_801CE8B8; +extern void func_8013D330(void); +extern void *D_801CD088; +extern void *D_801CD08C; +extern void *D_801CD090; +extern s32 D_801CD0B8; +extern s32 D_801CD0BC; +extern s32 D_801CD0C0; +extern s32 D_801CE82C[]; +extern u8 D_801850FC[]; +extern u8 D_801851A4[]; +extern u8 D_80185054[]; +extern u8 D_80185150[]; +extern u8 D_801851D0[]; +extern u8 D_801850A8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CD094; +extern s32 D_801CD0C4; +extern s32 D_801CD0C8; +extern s32 D_801CD0CC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CD0AC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80185C5C; +extern s32 D_80115188; +extern s16 D_80185C34; +extern s16 D_80185C36; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80185C38; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185914; +extern u8 *D_80185918; +extern u8 *D_8018591C; +extern u8 *D_80185920; +extern u8 *D_80185924; +extern u16 *D_80185928[]; +extern u16 *D_80185930[]; +extern u16 *D_80185950[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185914; + iVar2 = func_80028D58(); + puVar3 = D_80185928[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185918; + iVar2 = func_80028DE0(); + puVar3 = D_80185928[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018591C + 0x18) = *D_80185930[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185920 + 0x18) = *D_80185930[iVar2]; + + puVar1 = D_80185924; + iVar2 = func_80028D9C(); + puVar3 = D_80185950[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185850; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185850); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185860; +extern char *D_80185880; +extern char *D_80185884; +extern char *D_80185888; +extern char *D_8018588C; +extern char *D_80185890; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185860); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185880; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185884; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185888; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018588C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185890; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018571A; +extern unsigned short D_8018571E; +extern unsigned short D_80185722; +extern unsigned short D_80185726; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018571A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018571E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185722; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185726; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80185CB0[])(void); + +void func_80141788(void) +{ + D_80185CB0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80185CBC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80185CBC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80185C34; +extern s16 D_80185C36; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801858D4; + extern u8 D_801858EC; + extern u8 D_80185960; + extern u8 D_80185968; + extern void *D_801CD0E0; + extern void *D_801CD0E4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CD0E0 = &D_801858D4; + D_801CD0E4 = &D_80185960; + } else { + D_801CD0E0 = &D_801858EC; + D_801CD0E4 = &D_80185968; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80185C34 = 0xE; + D_80185C36 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80185C38: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80185C38; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80185C38); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185C10; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185C10 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80185CE0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80185CE0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80185CF0[])(void); + +void func_801425CC(void *a0) { + D_80185CF0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185CD4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185CD4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185D04[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185D04[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185D20[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185D20[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185EF0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185EF0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185FA8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185FA8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CC6F8; +extern u8 D_801CD0E8; +extern u8 D_801CD0E9; +extern u8 D_801CD0EA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CC6F8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CD0E8 = mul * (local.b[0] >> 4); + D_801CD0E9 = mul * (local.b[1] >> 4); + D_801CD0EA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80185CF8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185CF8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185D14[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185D14); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185EE0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185EE0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185F00[]; +extern unsigned char D_80185F60[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185F00); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185F60); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CC6F4; +extern u8 D_801CD0E8; +extern u8 D_801CD0EC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CC6F4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CD0E8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CD0E8, 0x10); + memcpy(&D_801CD0EC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801860B8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801860B8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801861E0[])(void); + +void func_80143B30(void *a0) { + D_801861E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801861EC[])(void); + +void func_80143C38(void *a0) { + D_801861EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801861F4[])(void); + +void func_80143C98(void *a0) { + D_801861F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80143D28); + + +extern void (*D_8018623C[])(void); + +void func_80143E68(void *a0) { + D_8018623C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186250[])(void); + +void func_80144054(void *a0) { + D_80186250[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80186258[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80186258[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801861D4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801861D4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801861E8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801861E8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801861E8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801861FC; +extern u8 D_80186208; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801861FC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80186208); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801861D4; +extern u8 D_80186244; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801861D4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186244, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186260[])(void); + +void func_801449C8(void *a0) { + D_80186260[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186268[])(void); + +void func_80144A2C(void *a0) { + D_80186268[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c b/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c index 1fe0228af..62ad14a78 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018A9C0; -extern u8 *D_8018A9C4; -extern u8 *D_8018A9C8; -extern u8 *D_8018A9CC; -extern u8 *D_8018A9D0; -extern u16 *D_8018A9D4[]; -extern u16 *D_8018A9DC[]; -extern u16 *D_8018A9FC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018A9C0; - iVar2 = func_80028D58(); - puVar3 = D_8018A9D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018A9C4; - iVar2 = func_80028DE0(); - puVar3 = D_8018A9D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018A9C8 + 0x18) = *D_8018A9DC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018A9CC + 0x18) = *D_8018A9DC[iVar2]; - - puVar1 = D_8018A9D0; - iVar2 = func_80028D9C(); - puVar3 = D_8018A9FC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018A8FC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018A8FC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018A90C; -extern char *D_8018A92C; -extern char *D_8018A930; -extern char *D_8018A934; -extern char *D_8018A938; -extern char *D_8018A93C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018A90C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018A92C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A930; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A934; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A938; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A93C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018A7C6; -extern unsigned short D_8018A7CA; -extern unsigned short D_8018A7CE; -extern unsigned short D_8018A7D2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018A7C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A7CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A7CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A7D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018AD5C[])(void); - -void func_80141788(void) -{ - D_8018AD5C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018AD68[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018AD68[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018ACE0; -extern s16 D_8018ACE2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018A980; - extern u8 D_8018A998; - extern u8 D_8018AA0C; - extern u8 D_8018AA14; - extern void *D_801D3030; - extern void *D_801D3034; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D3030 = &D_8018A980; - D_801D3034 = &D_8018AA0C; - } else { - D_801D3030 = &D_8018A998; - D_801D3034 = &D_8018AA14; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018ACE0 = 0xE; - D_8018ACE2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018ACE4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018ACE4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018ACE4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018ACBC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018ACBC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018AD8C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018AD8C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018AD9C[])(void); - -void func_801425CC(void *a0) { - D_8018AD9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018AD80; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018AD80); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018ADB0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018ADB0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018ADCC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018ADCC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018AF9C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018AF9C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018B054[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018B054[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D2654; -extern u8 D_801D3038; -extern u8 D_801D3039; -extern u8 D_801D303A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D2654; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D3038 = mul * (local.b[0] >> 4); - D_801D3039 = mul * (local.b[1] >> 4); - D_801D303A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018ADA4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018ADA4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018ADC0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018ADC0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018AF8C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018AF8C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018AFAC[]; -extern unsigned char D_8018B00C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018AFAC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018B00C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D2650; -extern u8 D_801D3038; -extern u8 D_801D303C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D2650, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D3038); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D3038, 0x10); - memcpy(&D_801D303C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018B164[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018B164[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018B28C[])(void); - -void func_80143B30(void *a0) { - D_8018B28C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018B298[])(void); - -void func_80143C38(void *a0) { - D_8018B298[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018B2A0[])(void); - -void func_80143C98(void *a0) { - D_8018B2A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018B2E8[])(void); - -void func_80143E68(void *a0) { - D_8018B2E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018B2FC[])(void); - -void func_80144054(void *a0) { - D_8018B2FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018B304[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018B304[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018B280; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018B280, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018B294; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018B294 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018B294 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018B2A8; -extern u8 D_8018B2B4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018B2A8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018B2B4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018B280; -extern u8 D_8018B2F0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018B280, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018B2F0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018B30C[])(void); - -void func_801449C8(void *a0) { - D_8018B30C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018B314[])(void); - -void func_80144A2C(void *a0) { - D_8018B314[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_118/ov_SC03_118_jr_80140608.c b/src/ov_SC03_118/ov_SC03_118_jr_80140608.c new file mode 100644 index 000000000..cc03ea6e2 --- /dev/null +++ b/src/ov_SC03_118/ov_SC03_118_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801D1CC4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80189C00[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D2EEC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D47E0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801D1CC4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018993C)(); +extern s16 (*D_80189940)(); +extern M2C_UNK (*D_80189948)(); +extern s32 (*D_8018994C)(); +extern s32 D_801D2EE8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801D1CC8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80189C94; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018D178; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80189CAC; +extern M2C_UNK D_80189CB4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80189CBC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80189CD8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80189CE4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80189CF8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80189D48[]; +extern s16 D_80189D78[]; +extern s16 D_80189DD8[]; +extern s16 D_80189DE0[]; +extern s16 D_80189E00[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80189E38[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80189E90[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80189ED8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80189EE0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80189EE8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80189EF0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80189E98; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80189EB8; +extern void func_801321B0(int param_1); +extern int D_80189EC8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D2F58; +extern s32 D_801D2F5C[]; +extern int D_801D2F60; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80189EFC; +extern u8 D_80189EF8; +extern s16 *D_80189F00; +extern u8 D_80189F04; +extern int D_801D2F58; +extern u16 D_801D2F68; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80189F00; /* holds a pointer value (*(u16**)&D_80189F00) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80189F14[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80189F68; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80189F6C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80189FB0; +extern u8 D_80189FF4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018A038[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018A0B0, D_8018A0B2, D_8018A0B4, D_8018A0B6, D_8018A0B8, D_8018A0BA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D2FD0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D2FD4; +extern s8 D_801D2FD5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D2FF4; +extern s32 D_801D2FE8; +extern s32 D_801D2FEC; +extern s32 D_801D2FF8; +extern void func_8013CABC(void); +extern s32 D_801D2FF0; +extern void func_8013CAE8(void); +extern s32 D_801D3020; +extern s32 D_801D3024; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D3000; +extern s32 D_801D3004; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D47DA; +extern u8 D_801D484E; +extern u8 D_801D4702; +extern u8 D_801D47BC; +extern u8 D_801D46E0; +extern u8 D_801D4701; +extern s32 D_801D47C0; +extern void func_8013D330(void); +extern void *D_801D2FD8; +extern void *D_801D2FDC; +extern void *D_801D2FE0; +extern s32 D_801D3008; +extern s32 D_801D300C; +extern s32 D_801D3010; +extern s32 D_801D4734[]; +extern u8 D_8018A1A8[]; +extern u8 D_8018A250[]; +extern u8 D_8018A100[]; +extern u8 D_8018A1FC[]; +extern u8 D_8018A27C[]; +extern u8 D_8018A154[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D2FE4; +extern s32 D_801D3014; +extern s32 D_801D3018; +extern s32 D_801D301C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D2FFC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018AD08; +extern s32 D_80115188; +extern s16 D_8018ACE0; +extern s16 D_8018ACE2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018ACE4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018A9C0; +extern u8 *D_8018A9C4; +extern u8 *D_8018A9C8; +extern u8 *D_8018A9CC; +extern u8 *D_8018A9D0; +extern u16 *D_8018A9D4[]; +extern u16 *D_8018A9DC[]; +extern u16 *D_8018A9FC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018A9C0; + iVar2 = func_80028D58(); + puVar3 = D_8018A9D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018A9C4; + iVar2 = func_80028DE0(); + puVar3 = D_8018A9D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018A9C8 + 0x18) = *D_8018A9DC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018A9CC + 0x18) = *D_8018A9DC[iVar2]; + + puVar1 = D_8018A9D0; + iVar2 = func_80028D9C(); + puVar3 = D_8018A9FC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018A8FC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018A8FC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018A90C; +extern char *D_8018A92C; +extern char *D_8018A930; +extern char *D_8018A934; +extern char *D_8018A938; +extern char *D_8018A93C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018A90C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018A92C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A930; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A934; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A938; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A93C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018A7C6; +extern unsigned short D_8018A7CA; +extern unsigned short D_8018A7CE; +extern unsigned short D_8018A7D2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018A7C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A7CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A7CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A7D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018AD5C[])(void); + +void func_80141788(void) +{ + D_8018AD5C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018AD68[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018AD68[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018ACE0; +extern s16 D_8018ACE2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018A980; + extern u8 D_8018A998; + extern u8 D_8018AA0C; + extern u8 D_8018AA14; + extern void *D_801D3030; + extern void *D_801D3034; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D3030 = &D_8018A980; + D_801D3034 = &D_8018AA0C; + } else { + D_801D3030 = &D_8018A998; + D_801D3034 = &D_8018AA14; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018ACE0 = 0xE; + D_8018ACE2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018ACE4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018ACE4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018ACE4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018ACBC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018ACBC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018AD8C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018AD8C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018AD9C[])(void); + +void func_801425CC(void *a0) { + D_8018AD9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018AD80; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018AD80); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018ADB0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018ADB0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018ADCC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018ADCC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018AF9C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018AF9C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018B054[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018B054[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D2654; +extern u8 D_801D3038; +extern u8 D_801D3039; +extern u8 D_801D303A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D2654; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D3038 = mul * (local.b[0] >> 4); + D_801D3039 = mul * (local.b[1] >> 4); + D_801D303A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018ADA4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018ADA4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018ADC0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018ADC0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018AF8C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018AF8C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018AFAC[]; +extern unsigned char D_8018B00C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018AFAC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018B00C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D2650; +extern u8 D_801D3038; +extern u8 D_801D303C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D2650, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D3038); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D3038, 0x10); + memcpy(&D_801D303C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018B164[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018B164[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018B28C[])(void); + +void func_80143B30(void *a0) { + D_8018B28C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018B298[])(void); + +void func_80143C38(void *a0) { + D_8018B298[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018B2A0[])(void); + +void func_80143C98(void *a0) { + D_8018B2A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80143D28); + + +extern void (*D_8018B2E8[])(void); + +void func_80143E68(void *a0) { + D_8018B2E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018B2FC[])(void); + +void func_80144054(void *a0) { + D_8018B2FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018B304[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018B304[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018B280; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018B280, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018B294; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018B294 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018B294 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018B2A8; +extern u8 D_8018B2B4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018B2A8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018B2B4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018B280; +extern u8 D_8018B2F0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018B280, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018B2F0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018B30C[])(void); + +void func_801449C8(void *a0) { + D_8018B30C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018B314[])(void); + +void func_80144A2C(void *a0) { + D_8018B314[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c b/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c index 35c2a9014..2c05b1264 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018A9C0; -extern u8 *D_8018A9C4; -extern u8 *D_8018A9C8; -extern u8 *D_8018A9CC; -extern u8 *D_8018A9D0; -extern u16 *D_8018A9D4[]; -extern u16 *D_8018A9DC[]; -extern u16 *D_8018A9FC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018A9C0; - iVar2 = func_80028D58(); - puVar3 = D_8018A9D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018A9C4; - iVar2 = func_80028DE0(); - puVar3 = D_8018A9D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018A9C8 + 0x18) = *D_8018A9DC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018A9CC + 0x18) = *D_8018A9DC[iVar2]; - - puVar1 = D_8018A9D0; - iVar2 = func_80028D9C(); - puVar3 = D_8018A9FC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018A8FC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018A8FC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018A90C; -extern char *D_8018A92C; -extern char *D_8018A930; -extern char *D_8018A934; -extern char *D_8018A938; -extern char *D_8018A93C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018A90C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018A92C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A930; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A934; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A938; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018A93C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018A7C6; -extern unsigned short D_8018A7CA; -extern unsigned short D_8018A7CE; -extern unsigned short D_8018A7D2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018A7C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A7CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A7CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018A7D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018AD5C[])(void); - -void func_80141788(void) -{ - D_8018AD5C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018AD68[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018AD68[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018ACE0; -extern s16 D_8018ACE2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018A980; - extern u8 D_8018A998; - extern u8 D_8018AA0C; - extern u8 D_8018AA14; - extern void *D_801D3030; - extern void *D_801D3034; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D3030 = &D_8018A980; - D_801D3034 = &D_8018AA0C; - } else { - D_801D3030 = &D_8018A998; - D_801D3034 = &D_8018AA14; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018ACE0 = 0xE; - D_8018ACE2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018ACE4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018ACE4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018ACE4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018ACBC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018ACBC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018AD8C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018AD8C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018AD9C[])(void); - -void func_801425CC(void *a0) { - D_8018AD9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018AD80; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018AD80); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018ADB0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018ADB0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018ADCC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018ADCC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018AF9C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018AF9C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018B054[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018B054[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D2654; -extern u8 D_801D3038; -extern u8 D_801D3039; -extern u8 D_801D303A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D2654; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D3038 = mul * (local.b[0] >> 4); - D_801D3039 = mul * (local.b[1] >> 4); - D_801D303A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018ADA4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018ADA4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018ADC0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018ADC0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018AF8C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018AF8C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018AFAC[]; -extern unsigned char D_8018B00C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018AFAC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018B00C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D2650; -extern u8 D_801D3038; -extern u8 D_801D303C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D2650, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D3038); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D3038, 0x10); - memcpy(&D_801D303C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018B164[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018B164[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018B28C[])(void); - -void func_80143B30(void *a0) { - D_8018B28C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018B298[])(void); - -void func_80143C38(void *a0) { - D_8018B298[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018B2A0[])(void); - -void func_80143C98(void *a0) { - D_8018B2A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018B2E8[])(void); - -void func_80143E68(void *a0) { - D_8018B2E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018B2FC[])(void); - -void func_80144054(void *a0) { - D_8018B2FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018B304[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018B304[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018B280; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018B280, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018B294; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018B294 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018B294 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018B2A8; -extern u8 D_8018B2B4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018B2A8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018B2B4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018B280; -extern u8 D_8018B2F0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018B280, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018B2F0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018B30C[])(void); - -void func_801449C8(void *a0) { - D_8018B30C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018B314[])(void); - -void func_80144A2C(void *a0) { - D_8018B314[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_119/ov_SC03_119_jr_80140608.c b/src/ov_SC03_119/ov_SC03_119_jr_80140608.c new file mode 100644 index 000000000..9a1cfa686 --- /dev/null +++ b/src/ov_SC03_119/ov_SC03_119_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801D1CC4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80189C00[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D2EEC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D47E0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801D1CC4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018993C)(); +extern s16 (*D_80189940)(); +extern M2C_UNK (*D_80189948)(); +extern s32 (*D_8018994C)(); +extern s32 D_801D2EE8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801D1CC8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80189C94; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018D178; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80189CAC; +extern M2C_UNK D_80189CB4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80189CBC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80189CD8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80189CE4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80189CF8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80189D48[]; +extern s16 D_80189D78[]; +extern s16 D_80189DD8[]; +extern s16 D_80189DE0[]; +extern s16 D_80189E00[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80189E38[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80189E90[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80189ED8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80189EE0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80189EE8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80189EF0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80189E98; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80189EB8; +extern void func_801321B0(int param_1); +extern int D_80189EC8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D2F58; +extern s32 D_801D2F5C[]; +extern int D_801D2F60; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80189EFC; +extern u8 D_80189EF8; +extern s16 *D_80189F00; +extern u8 D_80189F04; +extern int D_801D2F58; +extern u16 D_801D2F68; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80189F00; /* holds a pointer value (*(u16**)&D_80189F00) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80189F14[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80189F68; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80189F6C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80189FB0; +extern u8 D_80189FF4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018A038[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018A0B0, D_8018A0B2, D_8018A0B4, D_8018A0B6, D_8018A0B8, D_8018A0BA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D2FD0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D2FD4; +extern s8 D_801D2FD5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D2FF4; +extern s32 D_801D2FE8; +extern s32 D_801D2FEC; +extern s32 D_801D2FF8; +extern void func_8013CABC(void); +extern s32 D_801D2FF0; +extern void func_8013CAE8(void); +extern s32 D_801D3020; +extern s32 D_801D3024; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D3000; +extern s32 D_801D3004; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D47DA; +extern u8 D_801D484E; +extern u8 D_801D4702; +extern u8 D_801D47BC; +extern u8 D_801D46E0; +extern u8 D_801D4701; +extern s32 D_801D47C0; +extern void func_8013D330(void); +extern void *D_801D2FD8; +extern void *D_801D2FDC; +extern void *D_801D2FE0; +extern s32 D_801D3008; +extern s32 D_801D300C; +extern s32 D_801D3010; +extern s32 D_801D4734[]; +extern u8 D_8018A1A8[]; +extern u8 D_8018A250[]; +extern u8 D_8018A100[]; +extern u8 D_8018A1FC[]; +extern u8 D_8018A27C[]; +extern u8 D_8018A154[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D2FE4; +extern s32 D_801D3014; +extern s32 D_801D3018; +extern s32 D_801D301C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D2FFC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018AD08; +extern s32 D_80115188; +extern s16 D_8018ACE0; +extern s16 D_8018ACE2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018ACE4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018A9C0; +extern u8 *D_8018A9C4; +extern u8 *D_8018A9C8; +extern u8 *D_8018A9CC; +extern u8 *D_8018A9D0; +extern u16 *D_8018A9D4[]; +extern u16 *D_8018A9DC[]; +extern u16 *D_8018A9FC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018A9C0; + iVar2 = func_80028D58(); + puVar3 = D_8018A9D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018A9C4; + iVar2 = func_80028DE0(); + puVar3 = D_8018A9D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018A9C8 + 0x18) = *D_8018A9DC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018A9CC + 0x18) = *D_8018A9DC[iVar2]; + + puVar1 = D_8018A9D0; + iVar2 = func_80028D9C(); + puVar3 = D_8018A9FC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018A8FC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018A8FC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018A90C; +extern char *D_8018A92C; +extern char *D_8018A930; +extern char *D_8018A934; +extern char *D_8018A938; +extern char *D_8018A93C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018A90C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018A92C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A930; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A934; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A938; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018A93C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018A7C6; +extern unsigned short D_8018A7CA; +extern unsigned short D_8018A7CE; +extern unsigned short D_8018A7D2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018A7C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A7CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A7CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018A7D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018AD5C[])(void); + +void func_80141788(void) +{ + D_8018AD5C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018AD68[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018AD68[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018ACE0; +extern s16 D_8018ACE2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018A980; + extern u8 D_8018A998; + extern u8 D_8018AA0C; + extern u8 D_8018AA14; + extern void *D_801D3030; + extern void *D_801D3034; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D3030 = &D_8018A980; + D_801D3034 = &D_8018AA0C; + } else { + D_801D3030 = &D_8018A998; + D_801D3034 = &D_8018AA14; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018ACE0 = 0xE; + D_8018ACE2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018ACE4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018ACE4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018ACE4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018ACBC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018ACBC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018AD8C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018AD8C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018AD9C[])(void); + +void func_801425CC(void *a0) { + D_8018AD9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018AD80; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018AD80); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018ADB0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018ADB0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018ADCC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018ADCC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018AF9C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018AF9C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018B054[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018B054[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D2654; +extern u8 D_801D3038; +extern u8 D_801D3039; +extern u8 D_801D303A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D2654; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D3038 = mul * (local.b[0] >> 4); + D_801D3039 = mul * (local.b[1] >> 4); + D_801D303A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018ADA4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018ADA4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018ADC0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018ADC0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018AF8C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018AF8C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018AFAC[]; +extern unsigned char D_8018B00C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018AFAC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018B00C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D2650; +extern u8 D_801D3038; +extern u8 D_801D303C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D2650, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D3038); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D3038, 0x10); + memcpy(&D_801D303C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018B164[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018B164[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018B28C[])(void); + +void func_80143B30(void *a0) { + D_8018B28C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018B298[])(void); + +void func_80143C38(void *a0) { + D_8018B298[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018B2A0[])(void); + +void func_80143C98(void *a0) { + D_8018B2A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80143D28); + + +extern void (*D_8018B2E8[])(void); + +void func_80143E68(void *a0) { + D_8018B2E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018B2FC[])(void); + +void func_80144054(void *a0) { + D_8018B2FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018B304[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018B304[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018B280; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018B280, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018B294; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018B294 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018B294 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018B2A8; +extern u8 D_8018B2B4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018B2A8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018B2B4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018B280; +extern u8 D_8018B2F0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018B280, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018B2F0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018B30C[])(void); + +void func_801449C8(void *a0) { + D_8018B30C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018B314[])(void); + +void func_80144A2C(void *a0) { + D_8018B314[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c b/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c index 3811e976e..3d08087df 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801831DC; -extern u8 *D_801831E0; -extern u8 *D_801831E4; -extern u8 *D_801831E8; -extern u8 *D_801831EC; -extern u16 *D_801831F0[]; -extern u16 *D_801831F8[]; -extern u16 *D_80183218[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801831DC; - iVar2 = func_80028D58(); - puVar3 = D_801831F0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801831E0; - iVar2 = func_80028DE0(); - puVar3 = D_801831F0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801831E4 + 0x18) = *D_801831F8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801831E8 + 0x18) = *D_801831F8[iVar2]; - - puVar1 = D_801831EC; - iVar2 = func_80028D9C(); - puVar3 = D_80183218[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183118; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183118); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183128; -extern char *D_80183148; -extern char *D_8018314C; -extern char *D_80183150; -extern char *D_80183154; -extern char *D_80183158; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183128); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183148; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018314C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183150; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183154; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183158; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80182FE2; -extern unsigned short D_80182FE6; -extern unsigned short D_80182FEA; -extern unsigned short D_80182FEE; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80182FE2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80182FE6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182FEA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182FEE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183578[])(void); - -void func_80141788(void) -{ - D_80183578[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183584[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183584[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801834FC; -extern s16 D_801834FE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018319C; - extern u8 D_801831B4; - extern u8 D_80183228; - extern u8 D_80183230; - extern void *D_801ADAD8; - extern void *D_801ADADC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801ADAD8 = &D_8018319C; - D_801ADADC = &D_80183228; - } else { - D_801ADAD8 = &D_801831B4; - D_801ADADC = &D_80183230; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801834FC = 0xE; - D_801834FE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80183500: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80183500; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80183500); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801834D8; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801834D8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801835A8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801835A8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801835B8[])(void); - -void func_801425CC(void *a0) { - D_801835B8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018359C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018359C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801835CC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801835CC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801835E8[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801835E8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801837B8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801837B8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183870[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183870[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801AD15C; -extern u8 D_801ADAE0; -extern u8 D_801ADAE1; -extern u8 D_801ADAE2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801AD15C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801ADAE0 = mul * (local.b[0] >> 4); - D_801ADAE1 = mul * (local.b[1] >> 4); - D_801ADAE2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801835C0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801835C0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801835DC[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801835DC); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801837A8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801837A8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801837C8[]; -extern unsigned char D_80183828[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801837C8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183828); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801AD158; -extern u8 D_801ADAE0; -extern u8 D_801ADAE4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801AD158, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801ADAE0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801ADAE0, 0x10); - memcpy(&D_801ADAE4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183980[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183980[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183AA8[])(void); - -void func_80143B30(void *a0) { - D_80183AA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183AB4[])(void); - -void func_80143C38(void *a0) { - D_80183AB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183ABC[])(void); - -void func_80143C98(void *a0) { - D_80183ABC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183B04[])(void); - -void func_80143E68(void *a0) { - D_80183B04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183B18[])(void); - -void func_80144054(void *a0) { - D_80183B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183B20[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183B20[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183A9C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183A9C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183AB0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183AB0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183AB0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183AC4; -extern u8 D_80183AD0; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183AC4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183AD0); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183A9C; -extern u8 D_80183B0C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183A9C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183B0C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183B28[])(void); - -void func_801449C8(void *a0) { - D_80183B28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183B30[])(void); - -void func_80144A2C(void *a0) { - D_80183B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_121/ov_SC03_121_jr_80140608.c b/src/ov_SC03_121/ov_SC03_121_jr_80140608.c new file mode 100644 index 000000000..27f992923 --- /dev/null +++ b/src/ov_SC03_121/ov_SC03_121_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AC7CC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018241C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801AD994; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AEF40; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AC7CC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182158)(); +extern s16 (*D_8018215C)(); +extern M2C_UNK (*D_80182164)(); +extern s32 (*D_80182168)(); +extern s32 D_801AD990; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AC7D0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801824B0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185994; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801824C8; +extern M2C_UNK D_801824D0; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801824D8; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801824F4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80182500[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80182514[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182564[]; +extern s16 D_80182594[]; +extern s16 D_801825F4[]; +extern s16 D_801825FC[]; +extern s16 D_8018261C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182654[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801826AC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801826F4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801826FC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182704[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018270C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801826B4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801826D4; +extern void func_801321B0(int param_1); +extern int D_801826E4; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801ADA00; +extern s32 D_801ADA04[]; +extern int D_801ADA08; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182718; +extern u8 D_80182714; +extern s16 *D_8018271C; +extern u8 D_80182720; +extern int D_801ADA00; +extern u16 D_801ADA10; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018271C; /* holds a pointer value (*(u16**)&D_8018271C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182730[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182784; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182788[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801827CC; +extern u8 D_80182810; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182854[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801828CC, D_801828CE, D_801828D0, D_801828D2, D_801828D4, D_801828D6; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801ADA78; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801ADA7C; +extern s8 D_801ADA7D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801ADA9C; +extern s32 D_801ADA90; +extern s32 D_801ADA94; +extern s32 D_801ADAA0; +extern void func_8013CABC(void); +extern s32 D_801ADA98; +extern void func_8013CAE8(void); +extern s32 D_801ADAC8; +extern s32 D_801ADACC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801ADAA8; +extern s32 D_801ADAAC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AEF3A; +extern u8 D_801AEFAE; +extern u8 D_801AEE62; +extern u8 D_801AEF1C; +extern u8 D_801AEE40; +extern u8 D_801AEE61; +extern s32 D_801AEF20; +extern void func_8013D330(void); +extern void *D_801ADA80; +extern void *D_801ADA84; +extern void *D_801ADA88; +extern s32 D_801ADAB0; +extern s32 D_801ADAB4; +extern s32 D_801ADAB8; +extern s32 D_801AEE94[]; +extern u8 D_801829C4[]; +extern u8 D_80182A6C[]; +extern u8 D_8018291C[]; +extern u8 D_80182A18[]; +extern u8 D_80182A98[]; +extern u8 D_80182970[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801ADA8C; +extern s32 D_801ADABC; +extern s32 D_801ADAC0; +extern s32 D_801ADAC4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801ADAA4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183524; +extern s32 D_80115188; +extern s16 D_801834FC; +extern s16 D_801834FE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80183500; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801831DC; +extern u8 *D_801831E0; +extern u8 *D_801831E4; +extern u8 *D_801831E8; +extern u8 *D_801831EC; +extern u16 *D_801831F0[]; +extern u16 *D_801831F8[]; +extern u16 *D_80183218[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801831DC; + iVar2 = func_80028D58(); + puVar3 = D_801831F0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801831E0; + iVar2 = func_80028DE0(); + puVar3 = D_801831F0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801831E4 + 0x18) = *D_801831F8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801831E8 + 0x18) = *D_801831F8[iVar2]; + + puVar1 = D_801831EC; + iVar2 = func_80028D9C(); + puVar3 = D_80183218[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183118; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183118); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183128; +extern char *D_80183148; +extern char *D_8018314C; +extern char *D_80183150; +extern char *D_80183154; +extern char *D_80183158; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183128); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183148; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018314C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183150; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183154; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183158; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80182FE2; +extern unsigned short D_80182FE6; +extern unsigned short D_80182FEA; +extern unsigned short D_80182FEE; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80182FE2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80182FE6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182FEA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182FEE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183578[])(void); + +void func_80141788(void) +{ + D_80183578[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183584[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183584[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801834FC; +extern s16 D_801834FE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018319C; + extern u8 D_801831B4; + extern u8 D_80183228; + extern u8 D_80183230; + extern void *D_801ADAD8; + extern void *D_801ADADC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801ADAD8 = &D_8018319C; + D_801ADADC = &D_80183228; + } else { + D_801ADAD8 = &D_801831B4; + D_801ADADC = &D_80183230; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801834FC = 0xE; + D_801834FE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80183500: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80183500; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80183500); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801834D8; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801834D8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801835A8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801835A8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801835B8[])(void); + +void func_801425CC(void *a0) { + D_801835B8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018359C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018359C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801835CC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801835CC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801835E8[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801835E8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801837B8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801837B8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183870[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183870[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801AD15C; +extern u8 D_801ADAE0; +extern u8 D_801ADAE1; +extern u8 D_801ADAE2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801AD15C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801ADAE0 = mul * (local.b[0] >> 4); + D_801ADAE1 = mul * (local.b[1] >> 4); + D_801ADAE2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801835C0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801835C0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801835DC[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801835DC); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801837A8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801837A8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801837C8[]; +extern unsigned char D_80183828[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801837C8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183828); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801AD158; +extern u8 D_801ADAE0; +extern u8 D_801ADAE4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801AD158, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801ADAE0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801ADAE0, 0x10); + memcpy(&D_801ADAE4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183980[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183980[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183AA8[])(void); + +void func_80143B30(void *a0) { + D_80183AA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183AB4[])(void); + +void func_80143C38(void *a0) { + D_80183AB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183ABC[])(void); + +void func_80143C98(void *a0) { + D_80183ABC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80143D28); + + +extern void (*D_80183B04[])(void); + +void func_80143E68(void *a0) { + D_80183B04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183B18[])(void); + +void func_80144054(void *a0) { + D_80183B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183B20[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183B20[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183A9C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183A9C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183AB0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183AB0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183AB0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183AC4; +extern u8 D_80183AD0; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183AC4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183AD0); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183A9C; +extern u8 D_80183B0C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183A9C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183B0C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183B28[])(void); + +void func_801449C8(void *a0) { + D_80183B28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183B30[])(void); + +void func_80144A2C(void *a0) { + D_80183B30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8013FFD8.c b/src/ov_SC03_124/ov_SC03_124_jr_8013FFD8.c index 1644c1515..069ebf223 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_8013FFD8.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018BC08; -extern u8 *D_8018BC0C; -extern u8 *D_8018BC10; -extern u8 *D_8018BC14; -extern u8 *D_8018BC18; -extern u16 *D_8018BC1C[]; -extern u16 *D_8018BC24[]; -extern u16 *D_8018BC44[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018BC08; - iVar2 = func_80028D58(); - puVar3 = D_8018BC1C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018BC0C; - iVar2 = func_80028DE0(); - puVar3 = D_8018BC1C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018BC10 + 0x18) = *D_8018BC24[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018BC14 + 0x18) = *D_8018BC24[iVar2]; - - puVar1 = D_8018BC18; - iVar2 = func_80028D9C(); - puVar3 = D_8018BC44[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018BB44; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018BB44); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018BB54; -extern char *D_8018BB74; -extern char *D_8018BB78; -extern char *D_8018BB7C; -extern char *D_8018BB80; -extern char *D_8018BB84; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018BB54); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018BB74; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BB78; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BB7C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BB80; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018BB84; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018BA0E; -extern unsigned short D_8018BA12; -extern unsigned short D_8018BA16; -extern unsigned short D_8018BA1A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018BA0E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA12; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA16; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018BA1A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018BFA4[])(void); - -void func_80141788(void) -{ - D_8018BFA4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018BFB0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018BFB0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018BF28; -extern s16 D_8018BF2A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018BBC8; - extern u8 D_8018BBE0; - extern u8 D_8018BC54; - extern u8 D_8018BC5C; - extern void *D_801E0600; - extern void *D_801E0604; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E0600 = &D_8018BBC8; - D_801E0604 = &D_8018BC54; - } else { - D_801E0600 = &D_8018BBE0; - D_801E0604 = &D_8018BC5C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018BF28 = 0xE; - D_8018BF2A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018BF2C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018BF2C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018BF2C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018BF04; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018BF04 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018BFD4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018BFD4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018BFE4[])(void); - -void func_801425CC(void *a0) { - D_8018BFE4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018BFC8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018BFC8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018BFF8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018BFF8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C014[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C014[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C1E4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C1E4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018C29C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018C29C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801DF8B0; -extern u8 D_801E0608; -extern u8 D_801E0609; -extern u8 D_801E060A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801DF8B0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E0608 = mul * (local.b[0] >> 4); - D_801E0609 = mul * (local.b[1] >> 4); - D_801E060A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018BFEC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018BFEC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C008[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C008); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018C1D4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018C1D4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018C1F4[]; -extern unsigned char D_8018C254[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C1F4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018C254); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801DF8AC; -extern u8 D_801E0608; -extern u8 D_801E060C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801DF8AC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E0608); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E0608, 0x10); - memcpy(&D_801E060C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018C3AC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018C3AC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018C4D4[])(void); - -void func_80143B30(void *a0) { - D_8018C4D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018C4E0[])(void); - -void func_80143C38(void *a0) { - D_8018C4E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018C4E8[])(void); - -void func_80143C98(void *a0) { - D_8018C4E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018C530[])(void); - -void func_80143E68(void *a0) { - D_8018C530[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018C544[])(void); - -void func_80144054(void *a0) { - D_8018C544[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018C54C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018C54C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018C4C8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018C4C8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018C4DC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C4DC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C4DC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018C4F0; -extern u8 D_8018C4FC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C4F0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C4FC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018C4C8; -extern u8 D_8018C538; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018C4C8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018C538, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018C554[])(void); - -void func_801449C8(void *a0) { - D_8018C554[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018C55C[])(void); - -void func_80144A2C(void *a0) { - D_8018C55C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_124/ov_SC03_124_jr_80140608.c b/src/ov_SC03_124/ov_SC03_124_jr_80140608.c new file mode 100644 index 000000000..1b94cb537 --- /dev/null +++ b/src/ov_SC03_124/ov_SC03_124_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801DEF20; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018AE48[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E04BC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E2578; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801DEF20; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018AB7C)(); +extern s16 (*D_8018AB80)(); +extern M2C_UNK (*D_8018AB88)(); +extern s32 (*D_8018AB8C)(); +extern s32 D_801E04B8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801DEF24; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018AEDC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018E3C0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018AEF4; +extern M2C_UNK D_8018AEFC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018AF04; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018AF20[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018AF2C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018AF40[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018AF90[]; +extern s16 D_8018AFC0[]; +extern s16 D_8018B020[]; +extern s16 D_8018B028[]; +extern s16 D_8018B048[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018B080[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018B0D8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018B120[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018B128[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018B130[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018B138[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018B0E0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018B100; +extern void func_801321B0(int param_1); +extern int D_8018B110; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E0528; +extern s32 D_801E052C[]; +extern int D_801E0530; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018B144; +extern u8 D_8018B140; +extern s16 *D_8018B148; +extern u8 D_8018B14C; +extern int D_801E0528; +extern u16 D_801E0538; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018B148; /* holds a pointer value (*(u16**)&D_8018B148) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018B15C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018B1B0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018B1B4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018B1F8; +extern u8 D_8018B23C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018B280[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018B2F8, D_8018B2FA, D_8018B2FC, D_8018B2FE, D_8018B300, D_8018B302; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E05A0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E05A4; +extern s8 D_801E05A5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E05C4; +extern s32 D_801E05B8; +extern s32 D_801E05BC; +extern s32 D_801E05C8; +extern void func_8013CABC(void); +extern s32 D_801E05C0; +extern void func_8013CAE8(void); +extern s32 D_801E05F0; +extern s32 D_801E05F4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E05D0; +extern s32 D_801E05D4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E2572; +extern u8 D_801E25E6; +extern u8 D_801E2472; +extern u8 D_801E253C; +extern u8 D_801E2448; +extern u8 D_801E2471; +extern s32 D_801E2540; +extern void func_8013D330(void); +extern void *D_801E05A8; +extern void *D_801E05AC; +extern void *D_801E05B0; +extern s32 D_801E05D8; +extern s32 D_801E05DC; +extern s32 D_801E05E0; +extern s32 D_801E24B4[]; +extern u8 D_8018B3F0[]; +extern u8 D_8018B498[]; +extern u8 D_8018B348[]; +extern u8 D_8018B444[]; +extern u8 D_8018B4C4[]; +extern u8 D_8018B39C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E05B4; +extern s32 D_801E05E4; +extern s32 D_801E05E8; +extern s32 D_801E05EC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E05CC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018BF50; +extern s32 D_80115188; +extern s16 D_8018BF28; +extern s16 D_8018BF2A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018BF2C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018BC08; +extern u8 *D_8018BC0C; +extern u8 *D_8018BC10; +extern u8 *D_8018BC14; +extern u8 *D_8018BC18; +extern u16 *D_8018BC1C[]; +extern u16 *D_8018BC24[]; +extern u16 *D_8018BC44[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018BC08; + iVar2 = func_80028D58(); + puVar3 = D_8018BC1C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018BC0C; + iVar2 = func_80028DE0(); + puVar3 = D_8018BC1C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018BC10 + 0x18) = *D_8018BC24[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018BC14 + 0x18) = *D_8018BC24[iVar2]; + + puVar1 = D_8018BC18; + iVar2 = func_80028D9C(); + puVar3 = D_8018BC44[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018BB44; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018BB44); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018BB54; +extern char *D_8018BB74; +extern char *D_8018BB78; +extern char *D_8018BB7C; +extern char *D_8018BB80; +extern char *D_8018BB84; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018BB54); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018BB74; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BB78; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BB7C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BB80; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018BB84; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018BA0E; +extern unsigned short D_8018BA12; +extern unsigned short D_8018BA16; +extern unsigned short D_8018BA1A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018BA0E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA12; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA16; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018BA1A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018BFA4[])(void); + +void func_80141788(void) +{ + D_8018BFA4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018BFB0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018BFB0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018BF28; +extern s16 D_8018BF2A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018BBC8; + extern u8 D_8018BBE0; + extern u8 D_8018BC54; + extern u8 D_8018BC5C; + extern void *D_801E0600; + extern void *D_801E0604; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E0600 = &D_8018BBC8; + D_801E0604 = &D_8018BC54; + } else { + D_801E0600 = &D_8018BBE0; + D_801E0604 = &D_8018BC5C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018BF28 = 0xE; + D_8018BF2A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018BF2C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018BF2C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018BF2C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018BF04; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018BF04 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018BFD4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018BFD4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018BFE4[])(void); + +void func_801425CC(void *a0) { + D_8018BFE4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018BFC8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018BFC8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018BFF8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018BFF8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C014[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C014[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C1E4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C1E4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018C29C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018C29C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801DF8B0; +extern u8 D_801E0608; +extern u8 D_801E0609; +extern u8 D_801E060A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801DF8B0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E0608 = mul * (local.b[0] >> 4); + D_801E0609 = mul * (local.b[1] >> 4); + D_801E060A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018BFEC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018BFEC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C008[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018C008); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018C1D4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018C1D4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018C1F4[]; +extern unsigned char D_8018C254[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018C1F4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018C254); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801DF8AC; +extern u8 D_801E0608; +extern u8 D_801E060C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801DF8AC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E0608); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E0608, 0x10); + memcpy(&D_801E060C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018C3AC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018C3AC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018C4D4[])(void); + +void func_80143B30(void *a0) { + D_8018C4D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018C4E0[])(void); + +void func_80143C38(void *a0) { + D_8018C4E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018C4E8[])(void); + +void func_80143C98(void *a0) { + D_8018C4E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80143D28); + + +extern void (*D_8018C530[])(void); + +void func_80143E68(void *a0) { + D_8018C530[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018C544[])(void); + +void func_80144054(void *a0) { + D_8018C544[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018C54C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018C54C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018C4C8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018C4C8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018C4DC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018C4DC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018C4DC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018C4F0; +extern u8 D_8018C4FC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018C4F0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018C4FC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018C4C8; +extern u8 D_8018C538; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018C4C8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018C538, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018C554[])(void); + +void func_801449C8(void *a0) { + D_8018C554[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018C55C[])(void); + +void func_80144A2C(void *a0) { + D_8018C55C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8013FFD8.c b/src/ov_SC03_125/ov_SC03_125_jr_8013FFD8.c index ec240921e..c0895076b 100644 --- a/src/ov_SC03_125/ov_SC03_125_jr_8013FFD8.c +++ b/src/ov_SC03_125/ov_SC03_125_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80184DD8; -extern u8 *D_80184DDC; -extern u8 *D_80184DE0; -extern u8 *D_80184DE4; -extern u8 *D_80184DE8; -extern u16 *D_80184DEC[]; -extern u16 *D_80184DF4[]; -extern u16 *D_80184E14[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80184DD8; - iVar2 = func_80028D58(); - puVar3 = D_80184DEC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80184DDC; - iVar2 = func_80028DE0(); - puVar3 = D_80184DEC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80184DE0 + 0x18) = *D_80184DF4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80184DE4 + 0x18) = *D_80184DF4[iVar2]; - - puVar1 = D_80184DE8; - iVar2 = func_80028D9C(); - puVar3 = D_80184E14[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80184D14; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80184D14); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80184D24; -extern char *D_80184D44; -extern char *D_80184D48; -extern char *D_80184D4C; -extern char *D_80184D50; -extern char *D_80184D54; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80184D24); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80184D44; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184D48; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184D4C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184D50; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184D54; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80184BDE; -extern unsigned short D_80184BE2; -extern unsigned short D_80184BE6; -extern unsigned short D_80184BEA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80184BDE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80184BE2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80184BE6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80184BEA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80185174[])(void); - -void func_80141788(void) -{ - D_80185174[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80185180[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80185180[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801850F8; -extern s16 D_801850FA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80184D98; - extern u8 D_80184DB0; - extern u8 D_80184E24; - extern u8 D_80184E2C; - extern void *D_801C2EF8; - extern void *D_801C2EFC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C2EF8 = &D_80184D98; - D_801C2EFC = &D_80184E24; - } else { - D_801C2EF8 = &D_80184DB0; - D_801C2EFC = &D_80184E2C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801850F8 = 0xE; - D_801850FA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801850FC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801850FC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801850FC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801850D4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801850D4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801851A4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801851A4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801851B4[])(void); - -void func_801425CC(void *a0) { - D_801851B4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185198; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185198); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801851C8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801851C8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801851E4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801851E4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801853B4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801853B4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018546C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018546C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C259C; -extern u8 D_801C2F00; -extern u8 D_801C2F01; -extern u8 D_801C2F02; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C259C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C2F00 = mul * (local.b[0] >> 4); - D_801C2F01 = mul * (local.b[1] >> 4); - D_801C2F02 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801851BC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801851BC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801851D8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801851D8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801853A4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801853A4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801853C4[]; -extern unsigned char D_80185424[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801853C4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185424); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C2598; -extern u8 D_801C2F00; -extern u8 D_801C2F04; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C2598, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C2F00); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C2F00, 0x10); - memcpy(&D_801C2F04, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018557C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018557C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801856A4[])(void); - -void func_80143B30(void *a0) { - D_801856A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801856B0[])(void); - -void func_80143C38(void *a0) { - D_801856B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801856B8[])(void); - -void func_80143C98(void *a0) { - D_801856B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80143D28); - - -extern void (*D_80185700[])(void); - -void func_80143E68(void *a0) { - D_80185700[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80185714[])(void); - -void func_80144054(void *a0) { - D_80185714[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018571C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018571C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80185698; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80185698, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801856AC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801856AC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801856AC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801856C0; -extern u8 D_801856CC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801856C0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801856CC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80185698; -extern u8 D_80185708; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80185698, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80185708, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80185724[])(void); - -void func_801449C8(void *a0) { - D_80185724[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018572C[])(void); - -void func_80144A2C(void *a0) { - D_8018572C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_125/ov_SC03_125_jr_80140608.c b/src/ov_SC03_125/ov_SC03_125_jr_80140608.c new file mode 100644 index 000000000..fe7a64c1c --- /dev/null +++ b/src/ov_SC03_125/ov_SC03_125_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C1C0C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184018[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C2DB4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C44D0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C1C0C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80183D54)(); +extern s16 (*D_80183D58)(); +extern M2C_UNK (*D_80183D60)(); +extern s32 (*D_80183D64)(); +extern s32 D_801C2DB0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C1C10; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801840AC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80187590; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801840C4; +extern M2C_UNK D_801840CC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801840D4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801840F0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801840FC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80184110[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80184160[]; +extern s16 D_80184190[]; +extern s16 D_801841F0[]; +extern s16 D_801841F8[]; +extern s16 D_80184218[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80184250[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801842A8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801842F0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801842F8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80184300[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184308[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801842B0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801842D0; +extern void func_801321B0(int param_1); +extern int D_801842E0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C2E20; +extern s32 D_801C2E24[]; +extern int D_801C2E28; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184314; +extern u8 D_80184310; +extern s16 *D_80184318; +extern u8 D_8018431C; +extern int D_801C2E20; +extern u16 D_801C2E30; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184318; /* holds a pointer value (*(u16**)&D_80184318) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018432C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184380; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184384[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801843C8; +extern u8 D_8018440C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184450[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801844C8, D_801844CA, D_801844CC, D_801844CE, D_801844D0, D_801844D2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C2E98; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C2E9C; +extern s8 D_801C2E9D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C2EBC; +extern s32 D_801C2EB0; +extern s32 D_801C2EB4; +extern s32 D_801C2EC0; +extern void func_8013CABC(void); +extern s32 D_801C2EB8; +extern void func_8013CAE8(void); +extern s32 D_801C2EE8; +extern s32 D_801C2EEC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C2EC8; +extern s32 D_801C2ECC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C44CA; +extern u8 D_801C453E; +extern u8 D_801C43CA; +extern u8 D_801C4494; +extern u8 D_801C43A0; +extern u8 D_801C43C9; +extern s32 D_801C4498; +extern void func_8013D330(void); +extern void *D_801C2EA0; +extern void *D_801C2EA4; +extern void *D_801C2EA8; +extern s32 D_801C2ED0; +extern s32 D_801C2ED4; +extern s32 D_801C2ED8; +extern s32 D_801C440C[]; +extern u8 D_801845C0[]; +extern u8 D_80184668[]; +extern u8 D_80184518[]; +extern u8 D_80184614[]; +extern u8 D_80184694[]; +extern u8 D_8018456C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C2EAC; +extern s32 D_801C2EDC; +extern s32 D_801C2EE0; +extern s32 D_801C2EE4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C2EC4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80185120; +extern s32 D_80115188; +extern s16 D_801850F8; +extern s16 D_801850FA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801850FC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80184DD8; +extern u8 *D_80184DDC; +extern u8 *D_80184DE0; +extern u8 *D_80184DE4; +extern u8 *D_80184DE8; +extern u16 *D_80184DEC[]; +extern u16 *D_80184DF4[]; +extern u16 *D_80184E14[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80184DD8; + iVar2 = func_80028D58(); + puVar3 = D_80184DEC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80184DDC; + iVar2 = func_80028DE0(); + puVar3 = D_80184DEC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80184DE0 + 0x18) = *D_80184DF4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80184DE4 + 0x18) = *D_80184DF4[iVar2]; + + puVar1 = D_80184DE8; + iVar2 = func_80028D9C(); + puVar3 = D_80184E14[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80184D14; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80184D14); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80184D24; +extern char *D_80184D44; +extern char *D_80184D48; +extern char *D_80184D4C; +extern char *D_80184D50; +extern char *D_80184D54; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80184D24); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80184D44; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184D48; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184D4C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184D50; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184D54; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80184BDE; +extern unsigned short D_80184BE2; +extern unsigned short D_80184BE6; +extern unsigned short D_80184BEA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80184BDE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80184BE2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80184BE6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80184BEA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80185174[])(void); + +void func_80141788(void) +{ + D_80185174[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80185180[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80185180[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801850F8; +extern s16 D_801850FA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80184D98; + extern u8 D_80184DB0; + extern u8 D_80184E24; + extern u8 D_80184E2C; + extern void *D_801C2EF8; + extern void *D_801C2EFC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C2EF8 = &D_80184D98; + D_801C2EFC = &D_80184E24; + } else { + D_801C2EF8 = &D_80184DB0; + D_801C2EFC = &D_80184E2C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801850F8 = 0xE; + D_801850FA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801850FC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801850FC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801850FC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801850D4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801850D4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801851A4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801851A4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801851B4[])(void); + +void func_801425CC(void *a0) { + D_801851B4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185198; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185198); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801851C8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801851C8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801851E4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801851E4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801853B4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801853B4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018546C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018546C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C259C; +extern u8 D_801C2F00; +extern u8 D_801C2F01; +extern u8 D_801C2F02; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C259C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C2F00 = mul * (local.b[0] >> 4); + D_801C2F01 = mul * (local.b[1] >> 4); + D_801C2F02 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801851BC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801851BC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801851D8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801851D8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801853A4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801853A4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801853C4[]; +extern unsigned char D_80185424[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801853C4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185424); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C2598; +extern u8 D_801C2F00; +extern u8 D_801C2F04; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C2598, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C2F00); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C2F00, 0x10); + memcpy(&D_801C2F04, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018557C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018557C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801856A4[])(void); + +void func_80143B30(void *a0) { + D_801856A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801856B0[])(void); + +void func_80143C38(void *a0) { + D_801856B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801856B8[])(void); + +void func_80143C98(void *a0) { + D_801856B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80143D28); + + +extern void (*D_80185700[])(void); + +void func_80143E68(void *a0) { + D_80185700[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80185714[])(void); + +void func_80144054(void *a0) { + D_80185714[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018571C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018571C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185698; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80185698, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801856AC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801856AC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801856AC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801856C0; +extern u8 D_801856CC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801856C0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801856CC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80185698; +extern u8 D_80185708; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80185698, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80185708, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80185724[])(void); + +void func_801449C8(void *a0) { + D_80185724[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018572C[])(void); + +void func_80144A2C(void *a0) { + D_8018572C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c b/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c index 74615d685..d739ab008 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801802D0; -extern u8 *D_801802D4; -extern u8 *D_801802D8; -extern u8 *D_801802DC; -extern u8 *D_801802E0; -extern u16 *D_801802E4[]; -extern u16 *D_801802EC[]; -extern u16 *D_8018030C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801802D0; - iVar2 = func_80028D58(); - puVar3 = D_801802E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801802D4; - iVar2 = func_80028DE0(); - puVar3 = D_801802E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801802D8 + 0x18) = *D_801802EC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801802DC + 0x18) = *D_801802EC[iVar2]; - - puVar1 = D_801802E0; - iVar2 = func_80028D9C(); - puVar3 = D_8018030C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018020C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018020C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018021C; -extern char *D_8018023C; -extern char *D_80180240; -extern char *D_80180244; -extern char *D_80180248; -extern char *D_8018024C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018021C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018023C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180240; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180244; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180248; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018024C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801800D6; -extern unsigned short D_801800DA; -extern unsigned short D_801800DE; -extern unsigned short D_801800E2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801800D6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801800DA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801800DE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801800E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018066C[])(void); - -void func_80141788(void) -{ - D_8018066C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180678[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180678[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801805F0; -extern s16 D_801805F2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180290; - extern u8 D_801802A8; - extern u8 D_8018031C; - extern u8 D_80180324; - extern void *D_8018E7C0; - extern void *D_8018E7C4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018E7C0 = &D_80180290; - D_8018E7C4 = &D_8018031C; - } else { - D_8018E7C0 = &D_801802A8; - D_8018E7C4 = &D_80180324; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801805F0 = 0xE; - D_801805F2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801805F4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801805F4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801805F4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801805CC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801805CC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018069C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018069C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801806AC[])(void); - -void func_801425CC(void *a0) { - D_801806AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180690; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180690); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801806C0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801806C0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801806DC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801806DC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801808AC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801808AC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180964[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180964[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018DE88; -extern u8 D_8018E7C8; -extern u8 D_8018E7C9; -extern u8 D_8018E7CA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018DE88; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018E7C8 = mul * (local.b[0] >> 4); - D_8018E7C9 = mul * (local.b[1] >> 4); - D_8018E7CA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801806B4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801806B4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801806D0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801806D0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018089C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018089C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801808BC[]; -extern unsigned char D_8018091C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801808BC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018091C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018DE84; -extern u8 D_8018E7C8; -extern u8 D_8018E7CC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018DE84, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E7C8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018E7C8, 0x10); - memcpy(&D_8018E7CC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180A74[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180A74[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180B9C[])(void); - -void func_80143B30(void *a0) { - D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180BA8[])(void); - -void func_80143C38(void *a0) { - D_80180BA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180BB0[])(void); - -void func_80143C98(void *a0) { - D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180BF8[])(void); - -void func_80143E68(void *a0) { - D_80180BF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180C0C[])(void); - -void func_80144054(void *a0) { - D_80180C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180C14[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180C14[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180B90; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180B90, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180BA4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BA4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BA4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180BB8; -extern u8 D_80180BC4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180BB8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180BC4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180B90; -extern u8 D_80180C00; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180B90, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180C00, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180C1C[])(void); - -void func_801449C8(void *a0) { - D_80180C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180C24[])(void); - -void func_80144A2C(void *a0) { - D_80180C24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC03_126/ov_SC03_126_jr_80140608.c b/src/ov_SC03_126/ov_SC03_126_jr_80140608.c new file mode 100644 index 000000000..741684ad6 --- /dev/null +++ b/src/ov_SC03_126/ov_SC03_126_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018D4F8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F510[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018E67C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8018FAB8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018D4F8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F24C)(); +extern s16 (*D_8017F250)(); +extern M2C_UNK (*D_8017F258)(); +extern s32 (*D_8017F25C)(); +extern s32 D_8018E678; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D4FC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F5A4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182A88; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F5BC; +extern M2C_UNK D_8017F5C4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F5CC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F5E8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F5F4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F608[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F658[]; +extern s16 D_8017F688[]; +extern s16 D_8017F6E8[]; +extern s16 D_8017F6F0[]; +extern s16 D_8017F710[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F748[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F7A0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F7E8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F7F0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F7F8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F800[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F7A8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F7C8; +extern void func_801321B0(int param_1); +extern int D_8017F7D8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018E6E8; +extern s32 D_8018E6EC[]; +extern int D_8018E6F0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F80C; +extern u8 D_8017F808; +extern s16 *D_8017F810; +extern u8 D_8017F814; +extern int D_8018E6E8; +extern u16 D_8018E6F8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F810; /* holds a pointer value (*(u16**)&D_8017F810) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F824[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F878; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F87C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F8C0; +extern u8 D_8017F904; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F948[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F9C0, D_8017F9C2, D_8017F9C4, D_8017F9C6, D_8017F9C8, D_8017F9CA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018E760; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018E764; +extern s8 D_8018E765; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018E784; +extern s32 D_8018E778; +extern s32 D_8018E77C; +extern s32 D_8018E788; +extern void func_8013CABC(void); +extern s32 D_8018E780; +extern void func_8013CAE8(void); +extern s32 D_8018E7B0; +extern s32 D_8018E7B4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018E790; +extern s32 D_8018E794; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8018FAB2; +extern u8 D_8018FB2C; +extern u8 D_8018F9DA; +extern u8 D_8018FA94; +extern u8 D_8018F9B8; +extern u8 D_8018F9D9; +extern s32 D_8018FA98; +extern void func_8013D330(void); +extern void *D_8018E768; +extern void *D_8018E76C; +extern void *D_8018E770; +extern s32 D_8018E798; +extern s32 D_8018E79C; +extern s32 D_8018E7A0; +extern s32 D_8018FA0C[]; +extern u8 D_8017FAB8[]; +extern u8 D_8017FB60[]; +extern u8 D_8017FA10[]; +extern u8 D_8017FB0C[]; +extern u8 D_8017FB8C[]; +extern u8 D_8017FA64[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018E774; +extern s32 D_8018E7A4; +extern s32 D_8018E7A8; +extern s32 D_8018E7AC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018E78C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180618; +extern s32 D_80115188; +extern s16 D_801805F0; +extern s16 D_801805F2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801805F4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801802D0; +extern u8 *D_801802D4; +extern u8 *D_801802D8; +extern u8 *D_801802DC; +extern u8 *D_801802E0; +extern u16 *D_801802E4[]; +extern u16 *D_801802EC[]; +extern u16 *D_8018030C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801802D0; + iVar2 = func_80028D58(); + puVar3 = D_801802E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801802D4; + iVar2 = func_80028DE0(); + puVar3 = D_801802E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801802D8 + 0x18) = *D_801802EC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801802DC + 0x18) = *D_801802EC[iVar2]; + + puVar1 = D_801802E0; + iVar2 = func_80028D9C(); + puVar3 = D_8018030C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018020C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018020C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018021C; +extern char *D_8018023C; +extern char *D_80180240; +extern char *D_80180244; +extern char *D_80180248; +extern char *D_8018024C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018021C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018023C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180240; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180244; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180248; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018024C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801800D6; +extern unsigned short D_801800DA; +extern unsigned short D_801800DE; +extern unsigned short D_801800E2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801800D6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801800DA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801800DE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801800E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018066C[])(void); + +void func_80141788(void) +{ + D_8018066C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180678[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180678[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801805F0; +extern s16 D_801805F2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180290; + extern u8 D_801802A8; + extern u8 D_8018031C; + extern u8 D_80180324; + extern void *D_8018E7C0; + extern void *D_8018E7C4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018E7C0 = &D_80180290; + D_8018E7C4 = &D_8018031C; + } else { + D_8018E7C0 = &D_801802A8; + D_8018E7C4 = &D_80180324; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801805F0 = 0xE; + D_801805F2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801805F4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801805F4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801805F4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801805CC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801805CC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018069C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018069C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801806AC[])(void); + +void func_801425CC(void *a0) { + D_801806AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180690; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180690); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801806C0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801806C0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801806DC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801806DC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801808AC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801808AC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180964[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180964[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018DE88; +extern u8 D_8018E7C8; +extern u8 D_8018E7C9; +extern u8 D_8018E7CA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018DE88; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018E7C8 = mul * (local.b[0] >> 4); + D_8018E7C9 = mul * (local.b[1] >> 4); + D_8018E7CA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801806B4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801806B4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801806D0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801806D0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018089C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018089C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801808BC[]; +extern unsigned char D_8018091C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801808BC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018091C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018DE84; +extern u8 D_8018E7C8; +extern u8 D_8018E7CC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018DE84, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E7C8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018E7C8, 0x10); + memcpy(&D_8018E7CC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180A74[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180A74[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180B9C[])(void); + +void func_80143B30(void *a0) { + D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180BA8[])(void); + +void func_80143C38(void *a0) { + D_80180BA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180BB0[])(void); + +void func_80143C98(void *a0) { + D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80143D28); + + +extern void (*D_80180BF8[])(void); + +void func_80143E68(void *a0) { + D_80180BF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180C0C[])(void); + +void func_80144054(void *a0) { + D_80180C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180C14[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180C14[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180B90; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180B90, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180BA4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BA4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BA4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180BB8; +extern u8 D_80180BC4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180BB8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180BC4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180B90; +extern u8 D_80180C00; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180B90, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180C00, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180C1C[])(void); + +void func_801449C8(void *a0) { + D_80180C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180C24[])(void); + +void func_80144A2C(void *a0) { + D_80180C24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c b/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c index 29d74711b..dfaec753a 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801842DC; -extern u8 *D_801842E0; -extern u8 *D_801842E4; -extern u8 *D_801842E8; -extern u8 *D_801842EC; -extern u16 *D_801842F0[]; -extern u16 *D_801842F8[]; -extern u16 *D_80184318[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801842DC; - iVar2 = func_80028D58(); - puVar3 = D_801842F0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801842E0; - iVar2 = func_80028DE0(); - puVar3 = D_801842F0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801842E4 + 0x18) = *D_801842F8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801842E8 + 0x18) = *D_801842F8[iVar2]; - - puVar1 = D_801842EC; - iVar2 = func_80028D9C(); - puVar3 = D_80184318[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80184218; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80184218); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80184228; -extern char *D_80184248; -extern char *D_8018424C; -extern char *D_80184250; -extern char *D_80184254; -extern char *D_80184258; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80184228); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80184248; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018424C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184250; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184254; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184258; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801840E2; -extern unsigned short D_801840E6; -extern unsigned short D_801840EA; -extern unsigned short D_801840EE; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801840E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801840E6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801840EA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801840EE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80184678[])(void); - -void func_80141788(void) -{ - D_80184678[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80184684[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80184684[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801845FC; -extern s16 D_801845FE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018429C; - extern u8 D_801842B4; - extern u8 D_80184328; - extern u8 D_80184330; - extern void *D_801A8870; - extern void *D_801A8874; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A8870 = &D_8018429C; - D_801A8874 = &D_80184328; - } else { - D_801A8870 = &D_801842B4; - D_801A8874 = &D_80184330; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801845FC = 0xE; - D_801845FE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80184600: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80184600; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80184600); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801845D8; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801845D8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801846A8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801846A8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801846B8[])(void); - -void func_801425CC(void *a0) { - D_801846B8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018469C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018469C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801846CC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801846CC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801846E8[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801846E8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801848B8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801848B8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184970[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184970[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A7F04; -extern u8 D_801A8878; -extern u8 D_801A8879; -extern u8 D_801A887A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A7F04; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A8878 = mul * (local.b[0] >> 4); - D_801A8879 = mul * (local.b[1] >> 4); - D_801A887A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801846C0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801846C0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801846DC[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801846DC); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801848A8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801848A8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801848C8[]; -extern unsigned char D_80184928[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801848C8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80184928); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A7F00; -extern u8 D_801A8878; -extern u8 D_801A887C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A7F00, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A8878); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A8878, 0x10); - memcpy(&D_801A887C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80184A80[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80184A80[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80184BA8[])(void); - -void func_80143B30(void *a0) { - D_80184BA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80184BB4[])(void); - -void func_80143C38(void *a0) { - D_80184BB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80184BBC[])(void); - -void func_80143C98(void *a0) { - D_80184BBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80143D28); - - -extern void (*D_80184C04[])(void); - -void func_80143E68(void *a0) { - D_80184C04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80184C18[])(void); - -void func_80144054(void *a0) { - D_80184C18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184C20[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184C20[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80184B9C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80184B9C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80184BB0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184BB0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184BB0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80184BC4; -extern u8 D_80184BD0; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184BC4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184BD0); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80184B9C; -extern u8 D_80184C0C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80184B9C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184C0C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80184C28[])(void); - -void func_801449C8(void *a0) { - D_80184C28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184C30[])(void); - -void func_80144A2C(void *a0) { - D_80184C30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_000/ov_SC04_000_jr_80140608.c b/src/ov_SC04_000/ov_SC04_000_jr_80140608.c new file mode 100644 index 000000000..8f54f21a0 --- /dev/null +++ b/src/ov_SC04_000/ov_SC04_000_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A7574; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018351C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A872C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AAFE8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A7574; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80183258)(); +extern s16 (*D_8018325C)(); +extern M2C_UNK (*D_80183264)(); +extern s32 (*D_80183268)(); +extern s32 D_801A8728; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A7578; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801835B0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80186A94; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801835C8; +extern M2C_UNK D_801835D0; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801835D8; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801835F4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80183600[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80183614[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80183664[]; +extern s16 D_80183694[]; +extern s16 D_801836F4[]; +extern s16 D_801836FC[]; +extern s16 D_8018371C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80183754[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801837AC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801837F4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801837FC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80183804[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018380C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801837B4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801837D4; +extern void func_801321B0(int param_1); +extern int D_801837E4; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A8798; +extern s32 D_801A879C[]; +extern int D_801A87A0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80183818; +extern u8 D_80183814; +extern s16 *D_8018381C; +extern u8 D_80183820; +extern int D_801A8798; +extern u16 D_801A87A8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018381C; /* holds a pointer value (*(u16**)&D_8018381C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80183830[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80183884; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80183888[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801838CC; +extern u8 D_80183910; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183954[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801839CC, D_801839CE, D_801839D0, D_801839D2, D_801839D4, D_801839D6; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A8810; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A8814; +extern s8 D_801A8815; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A8834; +extern s32 D_801A8828; +extern s32 D_801A882C; +extern s32 D_801A8838; +extern void func_8013CABC(void); +extern s32 D_801A8830; +extern void func_8013CAE8(void); +extern s32 D_801A8860; +extern s32 D_801A8864; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A8840; +extern s32 D_801A8844; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AAFE2; +extern u8 D_801AB056; +extern u8 D_801AAF0A; +extern u8 D_801AAFC4; +extern u8 D_801AAEE8; +extern u8 D_801AAF09; +extern s32 D_801AAFC8; +extern void func_8013D330(void); +extern void *D_801A8818; +extern void *D_801A881C; +extern void *D_801A8820; +extern s32 D_801A8848; +extern s32 D_801A884C; +extern s32 D_801A8850; +extern s32 D_801AAF3C[]; +extern u8 D_80183AC4[]; +extern u8 D_80183B6C[]; +extern u8 D_80183A1C[]; +extern u8 D_80183B18[]; +extern u8 D_80183B98[]; +extern u8 D_80183A70[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A8824; +extern s32 D_801A8854; +extern s32 D_801A8858; +extern s32 D_801A885C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A883C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80184624; +extern s32 D_80115188; +extern s16 D_801845FC; +extern s16 D_801845FE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80184600; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801842DC; +extern u8 *D_801842E0; +extern u8 *D_801842E4; +extern u8 *D_801842E8; +extern u8 *D_801842EC; +extern u16 *D_801842F0[]; +extern u16 *D_801842F8[]; +extern u16 *D_80184318[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801842DC; + iVar2 = func_80028D58(); + puVar3 = D_801842F0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801842E0; + iVar2 = func_80028DE0(); + puVar3 = D_801842F0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801842E4 + 0x18) = *D_801842F8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801842E8 + 0x18) = *D_801842F8[iVar2]; + + puVar1 = D_801842EC; + iVar2 = func_80028D9C(); + puVar3 = D_80184318[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80184218; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80184218); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80184228; +extern char *D_80184248; +extern char *D_8018424C; +extern char *D_80184250; +extern char *D_80184254; +extern char *D_80184258; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80184228); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80184248; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018424C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184250; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184254; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184258; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801840E2; +extern unsigned short D_801840E6; +extern unsigned short D_801840EA; +extern unsigned short D_801840EE; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801840E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801840E6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801840EA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801840EE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80184678[])(void); + +void func_80141788(void) +{ + D_80184678[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80184684[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80184684[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801845FC; +extern s16 D_801845FE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018429C; + extern u8 D_801842B4; + extern u8 D_80184328; + extern u8 D_80184330; + extern void *D_801A8870; + extern void *D_801A8874; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A8870 = &D_8018429C; + D_801A8874 = &D_80184328; + } else { + D_801A8870 = &D_801842B4; + D_801A8874 = &D_80184330; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801845FC = 0xE; + D_801845FE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80184600: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80184600; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80184600); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801845D8; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801845D8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801846A8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801846A8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801846B8[])(void); + +void func_801425CC(void *a0) { + D_801846B8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018469C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018469C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801846CC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801846CC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801846E8[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801846E8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801848B8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801848B8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184970[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184970[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A7F04; +extern u8 D_801A8878; +extern u8 D_801A8879; +extern u8 D_801A887A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A7F04; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A8878 = mul * (local.b[0] >> 4); + D_801A8879 = mul * (local.b[1] >> 4); + D_801A887A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801846C0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801846C0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801846DC[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801846DC); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801848A8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801848A8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801848C8[]; +extern unsigned char D_80184928[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801848C8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80184928); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A7F00; +extern u8 D_801A8878; +extern u8 D_801A887C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A7F00, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A8878); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A8878, 0x10); + memcpy(&D_801A887C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80184A80[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80184A80[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80184BA8[])(void); + +void func_80143B30(void *a0) { + D_80184BA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80184BB4[])(void); + +void func_80143C38(void *a0) { + D_80184BB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80184BBC[])(void); + +void func_80143C98(void *a0) { + D_80184BBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80143D28); + + +extern void (*D_80184C04[])(void); + +void func_80143E68(void *a0) { + D_80184C04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80184C18[])(void); + +void func_80144054(void *a0) { + D_80184C18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184C20[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184C20[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80184B9C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80184B9C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80184BB0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184BB0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184BB0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80184BC4; +extern u8 D_80184BD0; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184BC4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184BD0); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80184B9C; +extern u8 D_80184C0C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80184B9C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184C0C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80184C28[])(void); + +void func_801449C8(void *a0) { + D_80184C28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184C30[])(void); + +void func_80144A2C(void *a0) { + D_80184C30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c b/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c index 12104cb0c..63639e05c 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80189448; -extern u8 *D_8018944C; -extern u8 *D_80189450; -extern u8 *D_80189454; -extern u8 *D_80189458; -extern u16 *D_8018945C[]; -extern u16 *D_80189464[]; -extern u16 *D_80189484[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80189448; - iVar2 = func_80028D58(); - puVar3 = D_8018945C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018944C; - iVar2 = func_80028DE0(); - puVar3 = D_8018945C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80189450 + 0x18) = *D_80189464[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80189454 + 0x18) = *D_80189464[iVar2]; - - puVar1 = D_80189458; - iVar2 = func_80028D9C(); - puVar3 = D_80189484[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80189384; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80189384); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80189394; -extern char *D_801893B4; -extern char *D_801893B8; -extern char *D_801893BC; -extern char *D_801893C0; -extern char *D_801893C4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80189394); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801893B4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801893B8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801893BC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801893C0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801893C4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018924E; -extern unsigned short D_80189252; -extern unsigned short D_80189256; -extern unsigned short D_8018925A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018924E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80189252; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80189256; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018925A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801897E4[])(void); - -void func_80141788(void) -{ - D_801897E4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801897F0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801897F0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80189768; -extern s16 D_8018976A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80189408; - extern u8 D_80189420; - extern u8 D_80189494; - extern u8 D_8018949C; - extern void *D_801BFB80; - extern void *D_801BFB84; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801BFB80 = &D_80189408; - D_801BFB84 = &D_80189494; - } else { - D_801BFB80 = &D_80189420; - D_801BFB84 = &D_8018949C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80189768 = 0xE; - D_8018976A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018976C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018976C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018976C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80189744; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80189744 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80189814[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80189814[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80189824[])(void); - -void func_801425CC(void *a0) { - D_80189824[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80189808; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80189808); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189838[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189838[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189854[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189854[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189A24[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189A24[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189ADC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189ADC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801BF254; -extern u8 D_801BFB88; -extern u8 D_801BFB89; -extern u8 D_801BFB8A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801BF254; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801BFB88 = mul * (local.b[0] >> 4); - D_801BFB89 = mul * (local.b[1] >> 4); - D_801BFB8A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018982C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018982C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80189848[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80189848); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80189A14[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80189A14[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80189A34[]; -extern unsigned char D_80189A94[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80189A34); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80189A94); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801BF250; -extern u8 D_801BFB88; -extern u8 D_801BFB8C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801BF250, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801BFB88); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801BFB88, 0x10); - memcpy(&D_801BFB8C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80189BEC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80189BEC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80189D14[])(void); - -void func_80143B30(void *a0) { - D_80189D14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80189D20[])(void); - -void func_80143C38(void *a0) { - D_80189D20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80189D28[])(void); - -void func_80143C98(void *a0) { - D_80189D28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80143D28); - - -extern void (*D_80189D70[])(void); - -void func_80143E68(void *a0) { - D_80189D70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80189D84[])(void); - -void func_80144054(void *a0) { - D_80189D84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80189D8C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80189D8C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80189D08; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80189D08, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80189D1C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189D1C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189D1C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80189D30; -extern u8 D_80189D3C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189D30); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189D3C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80189D08; -extern u8 D_80189D78; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80189D08, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80189D78, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80189D94[])(void); - -void func_801449C8(void *a0) { - D_80189D94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80189D9C[])(void); - -void func_80144A2C(void *a0) { - D_80189D9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_002/ov_SC04_002_jr_80140608.c b/src/ov_SC04_002/ov_SC04_002_jr_80140608.c new file mode 100644 index 000000000..8cba11f6c --- /dev/null +++ b/src/ov_SC04_002/ov_SC04_002_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801BE8C4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80188688[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801BFA3C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C16C8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801BE8C4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801883C4)(); +extern s16 (*D_801883C8)(); +extern M2C_UNK (*D_801883D0)(); +extern s32 (*D_801883D4)(); +extern s32 D_801BFA38; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801BE8C8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018871C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018BC00; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80188734; +extern M2C_UNK D_8018873C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80188744; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80188760[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018876C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80188780[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801887D0[]; +extern s16 D_80188800[]; +extern s16 D_80188860[]; +extern s16 D_80188868[]; +extern s16 D_80188888[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801888C0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80188918[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80188960[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80188968[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80188970[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80188978[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80188920; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80188940; +extern void func_801321B0(int param_1); +extern int D_80188950; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801BFAA8; +extern s32 D_801BFAAC[]; +extern int D_801BFAB0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80188984; +extern u8 D_80188980; +extern s16 *D_80188988; +extern u8 D_8018898C; +extern int D_801BFAA8; +extern u16 D_801BFAB8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80188988; /* holds a pointer value (*(u16**)&D_80188988) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018899C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801889F0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801889F4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80188A38; +extern u8 D_80188A7C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80188AC0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80188B38, D_80188B3A, D_80188B3C, D_80188B3E, D_80188B40, D_80188B42; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801BFB20; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801BFB24; +extern s8 D_801BFB25; +extern void func_8013C9C4(void * arg0); +extern s32 D_801BFB44; +extern s32 D_801BFB38; +extern s32 D_801BFB3C; +extern s32 D_801BFB48; +extern void func_8013CABC(void); +extern s32 D_801BFB40; +extern void func_8013CAE8(void); +extern s32 D_801BFB70; +extern s32 D_801BFB74; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801BFB50; +extern s32 D_801BFB54; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C16C0; +extern u8 D_801C1736; +extern u8 D_801C15E2; +extern u8 D_801C169C; +extern u8 D_801C15C0; +extern u8 D_801C15E1; +extern s32 D_801C16A0; +extern void func_8013D330(void); +extern void *D_801BFB28; +extern void *D_801BFB2C; +extern void *D_801BFB30; +extern s32 D_801BFB58; +extern s32 D_801BFB5C; +extern s32 D_801BFB60; +extern s32 D_801C1614[]; +extern u8 D_80188C30[]; +extern u8 D_80188CD8[]; +extern u8 D_80188B88[]; +extern u8 D_80188C84[]; +extern u8 D_80188D04[]; +extern u8 D_80188BDC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801BFB34; +extern s32 D_801BFB64; +extern s32 D_801BFB68; +extern s32 D_801BFB6C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801BFB4C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80189790; +extern s32 D_80115188; +extern s16 D_80189768; +extern s16 D_8018976A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018976C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80189448; +extern u8 *D_8018944C; +extern u8 *D_80189450; +extern u8 *D_80189454; +extern u8 *D_80189458; +extern u16 *D_8018945C[]; +extern u16 *D_80189464[]; +extern u16 *D_80189484[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80189448; + iVar2 = func_80028D58(); + puVar3 = D_8018945C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018944C; + iVar2 = func_80028DE0(); + puVar3 = D_8018945C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80189450 + 0x18) = *D_80189464[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80189454 + 0x18) = *D_80189464[iVar2]; + + puVar1 = D_80189458; + iVar2 = func_80028D9C(); + puVar3 = D_80189484[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80189384; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80189384); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80189394; +extern char *D_801893B4; +extern char *D_801893B8; +extern char *D_801893BC; +extern char *D_801893C0; +extern char *D_801893C4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80189394); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801893B4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801893B8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801893BC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801893C0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801893C4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018924E; +extern unsigned short D_80189252; +extern unsigned short D_80189256; +extern unsigned short D_8018925A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018924E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80189252; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80189256; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018925A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801897E4[])(void); + +void func_80141788(void) +{ + D_801897E4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801897F0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801897F0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80189768; +extern s16 D_8018976A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80189408; + extern u8 D_80189420; + extern u8 D_80189494; + extern u8 D_8018949C; + extern void *D_801BFB80; + extern void *D_801BFB84; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801BFB80 = &D_80189408; + D_801BFB84 = &D_80189494; + } else { + D_801BFB80 = &D_80189420; + D_801BFB84 = &D_8018949C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80189768 = 0xE; + D_8018976A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018976C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018976C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018976C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80189744; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80189744 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80189814[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80189814[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80189824[])(void); + +void func_801425CC(void *a0) { + D_80189824[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80189808; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80189808); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189838[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189838[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189854[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189854[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189A24[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189A24[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189ADC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189ADC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801BF254; +extern u8 D_801BFB88; +extern u8 D_801BFB89; +extern u8 D_801BFB8A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801BF254; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801BFB88 = mul * (local.b[0] >> 4); + D_801BFB89 = mul * (local.b[1] >> 4); + D_801BFB8A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018982C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018982C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80189848[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80189848); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80189A14[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80189A14[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80189A34[]; +extern unsigned char D_80189A94[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80189A34); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80189A94); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801BF250; +extern u8 D_801BFB88; +extern u8 D_801BFB8C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801BF250, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801BFB88); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801BFB88, 0x10); + memcpy(&D_801BFB8C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80189BEC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80189BEC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80189D14[])(void); + +void func_80143B30(void *a0) { + D_80189D14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80189D20[])(void); + +void func_80143C38(void *a0) { + D_80189D20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80189D28[])(void); + +void func_80143C98(void *a0) { + D_80189D28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80143D28); + + +extern void (*D_80189D70[])(void); + +void func_80143E68(void *a0) { + D_80189D70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80189D84[])(void); + +void func_80144054(void *a0) { + D_80189D84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80189D8C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80189D8C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189D08; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80189D08, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80189D1C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189D1C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189D1C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80189D30; +extern u8 D_80189D3C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189D30); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189D3C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80189D08; +extern u8 D_80189D78; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80189D08, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80189D78, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80189D94[])(void); + +void func_801449C8(void *a0) { + D_80189D94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80189D9C[])(void); + +void func_80144A2C(void *a0) { + D_80189D9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c b/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c index d5f97c61e..38c198055 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801831E4; -extern u8 *D_801831E8; -extern u8 *D_801831EC; -extern u8 *D_801831F0; -extern u8 *D_801831F4; -extern u16 *D_801831F8[]; -extern u16 *D_80183200[]; -extern u16 *D_80183220[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801831E4; - iVar2 = func_80028D58(); - puVar3 = D_801831F8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801831E8; - iVar2 = func_80028DE0(); - puVar3 = D_801831F8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801831EC + 0x18) = *D_80183200[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801831F0 + 0x18) = *D_80183200[iVar2]; - - puVar1 = D_801831F4; - iVar2 = func_80028D9C(); - puVar3 = D_80183220[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183120; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183120); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183130; -extern char *D_80183150; -extern char *D_80183154; -extern char *D_80183158; -extern char *D_8018315C; -extern char *D_80183160; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183130); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183150; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183154; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183158; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018315C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183160; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80182FEA; -extern unsigned short D_80182FEE; -extern unsigned short D_80182FF2; -extern unsigned short D_80182FF6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80182FEA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80182FEE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182FF2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182FF6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183580[])(void); - -void func_80141788(void) -{ - D_80183580[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018358C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018358C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80183504; -extern s16 D_80183506; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801831A4; - extern u8 D_801831BC; - extern u8 D_80183230; - extern u8 D_80183238; - extern void *D_8019A7E8; - extern void *D_8019A7EC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019A7E8 = &D_801831A4; - D_8019A7EC = &D_80183230; - } else { - D_8019A7E8 = &D_801831BC; - D_8019A7EC = &D_80183238; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183504 = 0xE; - D_80183506 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80183508: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80183508; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80183508); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801834E0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801834E0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801835B0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801835B0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801835C0[])(void); - -void func_801425CC(void *a0) { - D_801835C0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801835A4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801835A4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801835D4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801835D4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801835F0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801835F0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801837C0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801837C0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183878[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183878[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80199ED0; -extern u8 D_8019A7F0; -extern u8 D_8019A7F1; -extern u8 D_8019A7F2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80199ED0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019A7F0 = mul * (local.b[0] >> 4); - D_8019A7F1 = mul * (local.b[1] >> 4); - D_8019A7F2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801835C8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801835C8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801835E4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801835E4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801837B0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801837B0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801837D0[]; -extern unsigned char D_80183830[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801837D0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183830); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80199ECC; -extern u8 D_8019A7F0; -extern u8 D_8019A7F4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80199ECC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019A7F0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019A7F0, 0x10); - memcpy(&D_8019A7F4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183988[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183988[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183AB0[])(void); - -void func_80143B30(void *a0) { - D_80183AB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183ABC[])(void); - -void func_80143C38(void *a0) { - D_80183ABC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183AC4[])(void); - -void func_80143C98(void *a0) { - D_80183AC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183B0C[])(void); - -void func_80143E68(void *a0) { - D_80183B0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183B20[])(void); - -void func_80144054(void *a0) { - D_80183B20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183B28[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183B28[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183AA4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183AA4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183AB8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183AB8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183AB8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183ACC; -extern u8 D_80183AD8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183ACC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183AD8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183AA4; -extern u8 D_80183B14; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183AA4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183B14, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183B30[])(void); - -void func_801449C8(void *a0) { - D_80183B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183B38[])(void); - -void func_80144A2C(void *a0) { - D_80183B38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_003/ov_SC04_003_jr_80140608.c b/src/ov_SC04_003/ov_SC04_003_jr_80140608.c new file mode 100644 index 000000000..ea1a7b516 --- /dev/null +++ b/src/ov_SC04_003/ov_SC04_003_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80199540; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182424[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019A6A4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019BB80; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80199540; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182160)(); +extern s16 (*D_80182164)(); +extern M2C_UNK (*D_8018216C)(); +extern s32 (*D_80182170)(); +extern s32 D_8019A6A0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80199544; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801824B8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018599C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801824D0; +extern M2C_UNK D_801824D8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801824E0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801824FC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80182508[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018251C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018256C[]; +extern s16 D_8018259C[]; +extern s16 D_801825FC[]; +extern s16 D_80182604[]; +extern s16 D_80182624[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018265C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801826B4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801826FC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182704[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018270C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182714[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801826BC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801826DC; +extern void func_801321B0(int param_1); +extern int D_801826EC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019A710; +extern s32 D_8019A714[]; +extern int D_8019A718; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182720; +extern u8 D_8018271C; +extern s16 *D_80182724; +extern u8 D_80182728; +extern int D_8019A710; +extern u16 D_8019A720; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182724; /* holds a pointer value (*(u16**)&D_80182724) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182738[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018278C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182790[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801827D4; +extern u8 D_80182818; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018285C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801828D4, D_801828D6, D_801828D8, D_801828DA, D_801828DC, D_801828DE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019A788; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019A78C; +extern s8 D_8019A78D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019A7AC; +extern s32 D_8019A7A0; +extern s32 D_8019A7A4; +extern s32 D_8019A7B0; +extern void func_8013CABC(void); +extern s32 D_8019A7A8; +extern void func_8013CAE8(void); +extern s32 D_8019A7D8; +extern s32 D_8019A7DC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019A7B8; +extern s32 D_8019A7BC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019BB7A; +extern u8 D_8019BBEE; +extern u8 D_8019BAA2; +extern u8 D_8019BB5C; +extern u8 D_8019BA80; +extern u8 D_8019BAA1; +extern s32 D_8019BB60; +extern void func_8013D330(void); +extern void *D_8019A790; +extern void *D_8019A794; +extern void *D_8019A798; +extern s32 D_8019A7C0; +extern s32 D_8019A7C4; +extern s32 D_8019A7C8; +extern s32 D_8019BAD4[]; +extern u8 D_801829CC[]; +extern u8 D_80182A74[]; +extern u8 D_80182924[]; +extern u8 D_80182A20[]; +extern u8 D_80182AA0[]; +extern u8 D_80182978[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019A79C; +extern s32 D_8019A7CC; +extern s32 D_8019A7D0; +extern s32 D_8019A7D4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019A7B4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018352C; +extern s32 D_80115188; +extern s16 D_80183504; +extern s16 D_80183506; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80183508; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801831E4; +extern u8 *D_801831E8; +extern u8 *D_801831EC; +extern u8 *D_801831F0; +extern u8 *D_801831F4; +extern u16 *D_801831F8[]; +extern u16 *D_80183200[]; +extern u16 *D_80183220[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801831E4; + iVar2 = func_80028D58(); + puVar3 = D_801831F8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801831E8; + iVar2 = func_80028DE0(); + puVar3 = D_801831F8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801831EC + 0x18) = *D_80183200[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801831F0 + 0x18) = *D_80183200[iVar2]; + + puVar1 = D_801831F4; + iVar2 = func_80028D9C(); + puVar3 = D_80183220[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183120; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183120); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183130; +extern char *D_80183150; +extern char *D_80183154; +extern char *D_80183158; +extern char *D_8018315C; +extern char *D_80183160; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183130); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183150; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183154; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183158; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018315C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183160; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80182FEA; +extern unsigned short D_80182FEE; +extern unsigned short D_80182FF2; +extern unsigned short D_80182FF6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80182FEA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80182FEE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182FF2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182FF6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183580[])(void); + +void func_80141788(void) +{ + D_80183580[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018358C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018358C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80183504; +extern s16 D_80183506; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801831A4; + extern u8 D_801831BC; + extern u8 D_80183230; + extern u8 D_80183238; + extern void *D_8019A7E8; + extern void *D_8019A7EC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019A7E8 = &D_801831A4; + D_8019A7EC = &D_80183230; + } else { + D_8019A7E8 = &D_801831BC; + D_8019A7EC = &D_80183238; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183504 = 0xE; + D_80183506 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80183508: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80183508; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80183508); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801834E0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801834E0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801835B0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801835B0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801835C0[])(void); + +void func_801425CC(void *a0) { + D_801835C0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801835A4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801835A4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801835D4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801835D4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801835F0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801835F0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801837C0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801837C0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183878[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183878[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80199ED0; +extern u8 D_8019A7F0; +extern u8 D_8019A7F1; +extern u8 D_8019A7F2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80199ED0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019A7F0 = mul * (local.b[0] >> 4); + D_8019A7F1 = mul * (local.b[1] >> 4); + D_8019A7F2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801835C8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801835C8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801835E4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801835E4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801837B0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801837B0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801837D0[]; +extern unsigned char D_80183830[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801837D0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183830); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80199ECC; +extern u8 D_8019A7F0; +extern u8 D_8019A7F4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80199ECC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019A7F0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019A7F0, 0x10); + memcpy(&D_8019A7F4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183988[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183988[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183AB0[])(void); + +void func_80143B30(void *a0) { + D_80183AB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183ABC[])(void); + +void func_80143C38(void *a0) { + D_80183ABC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183AC4[])(void); + +void func_80143C98(void *a0) { + D_80183AC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80143D28); + + +extern void (*D_80183B0C[])(void); + +void func_80143E68(void *a0) { + D_80183B0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183B20[])(void); + +void func_80144054(void *a0) { + D_80183B20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183B28[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183B28[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183AA4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183AA4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183AB8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183AB8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183AB8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183ACC; +extern u8 D_80183AD8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183ACC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183AD8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183AA4; +extern u8 D_80183B14; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183AA4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183B14, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183B30[])(void); + +void func_801449C8(void *a0) { + D_80183B30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183B38[])(void); + +void func_80144A2C(void *a0) { + D_80183B38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c b/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c index 6e46d1bd3..d10a0cda3 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185718; -extern u8 *D_8018571C; -extern u8 *D_80185720; -extern u8 *D_80185724; -extern u8 *D_80185728; -extern u16 *D_8018572C[]; -extern u16 *D_80185734[]; -extern u16 *D_80185754[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185718; - iVar2 = func_80028D58(); - puVar3 = D_8018572C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018571C; - iVar2 = func_80028DE0(); - puVar3 = D_8018572C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185720 + 0x18) = *D_80185734[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185724 + 0x18) = *D_80185734[iVar2]; - - puVar1 = D_80185728; - iVar2 = func_80028D9C(); - puVar3 = D_80185754[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185654; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185654); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185664; -extern char *D_80185684; -extern char *D_80185688; -extern char *D_8018568C; -extern char *D_80185690; -extern char *D_80185694; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185664); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185684; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185688; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018568C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185690; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185694; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018551E; -extern unsigned short D_80185522; -extern unsigned short D_80185526; -extern unsigned short D_8018552A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018551E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185522; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185526; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018552A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80185AB4[])(void); - -void func_80141788(void) -{ - D_80185AB4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80185AC0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80185AC0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80185A38; -extern s16 D_80185A3A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801856D8; - extern u8 D_801856F0; - extern u8 D_80185764; - extern u8 D_8018576C; - extern void *D_801B25E8; - extern void *D_801B25EC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B25E8 = &D_801856D8; - D_801B25EC = &D_80185764; - } else { - D_801B25E8 = &D_801856F0; - D_801B25EC = &D_8018576C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80185A38 = 0xE; - D_80185A3A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80185A3C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80185A3C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80185A3C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185A14; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185A14 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80185AE4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80185AE4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80185AF4[])(void); - -void func_801425CC(void *a0) { - D_80185AF4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185AD8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185AD8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185B08[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185B08[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185B24[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185B24[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185CF4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185CF4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185DAC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185DAC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B1CCC; -extern u8 D_801B25F0; -extern u8 D_801B25F1; -extern u8 D_801B25F2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B1CCC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B25F0 = mul * (local.b[0] >> 4); - D_801B25F1 = mul * (local.b[1] >> 4); - D_801B25F2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80185AFC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185AFC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185B18[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185B18); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185CE4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185CE4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185D04[]; -extern unsigned char D_80185D64[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185D04); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185D64); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B1CC8; -extern u8 D_801B25F0; -extern u8 D_801B25F4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B1CC8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B25F0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B25F0, 0x10); - memcpy(&D_801B25F4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80185EBC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80185EBC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80185FE4[])(void); - -void func_80143B30(void *a0) { - D_80185FE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80185FF0[])(void); - -void func_80143C38(void *a0) { - D_80185FF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80185FF8[])(void); - -void func_80143C98(void *a0) { - D_80185FF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80143D28); - - -extern void (*D_80186040[])(void); - -void func_80143E68(void *a0) { - D_80186040[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186054[])(void); - -void func_80144054(void *a0) { - D_80186054[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018605C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018605C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80185FD8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80185FD8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80185FEC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185FEC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185FEC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80186000; -extern u8 D_8018600C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186000); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018600C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80185FD8; -extern u8 D_80186048; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80185FD8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186048, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186064[])(void); - -void func_801449C8(void *a0) { - D_80186064[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018606C[])(void); - -void func_80144A2C(void *a0) { - D_8018606C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_004/ov_SC04_004_jr_80140608.c b/src/ov_SC04_004/ov_SC04_004_jr_80140608.c new file mode 100644 index 000000000..000a84931 --- /dev/null +++ b/src/ov_SC04_004/ov_SC04_004_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B133C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184958[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B24A4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B3BE8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B133C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184694)(); +extern s16 (*D_80184698)(); +extern M2C_UNK (*D_801846A0)(); +extern s32 (*D_801846A4)(); +extern s32 D_801B24A0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B1340; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801849EC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80187ED0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184A04; +extern M2C_UNK D_80184A0C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184A14; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80184A30[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80184A3C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80184A50[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80184AA0[]; +extern s16 D_80184AD0[]; +extern s16 D_80184B30[]; +extern s16 D_80184B38[]; +extern s16 D_80184B58[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80184B90[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80184BE8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80184C30[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80184C38[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80184C40[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184C48[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80184BF0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80184C10; +extern void func_801321B0(int param_1); +extern int D_80184C20; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B2510; +extern s32 D_801B2514[]; +extern int D_801B2518; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184C54; +extern u8 D_80184C50; +extern s16 *D_80184C58; +extern u8 D_80184C5C; +extern int D_801B2510; +extern u16 D_801B2520; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184C58; /* holds a pointer value (*(u16**)&D_80184C58) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80184C6C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184CC0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184CC4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184D08; +extern u8 D_80184D4C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184D90[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80184E08, D_80184E0A, D_80184E0C, D_80184E0E, D_80184E10, D_80184E12; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B2588; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B258C; +extern s8 D_801B258D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B25AC; +extern s32 D_801B25A0; +extern s32 D_801B25A4; +extern s32 D_801B25B0; +extern void func_8013CABC(void); +extern s32 D_801B25A8; +extern void func_8013CAE8(void); +extern s32 D_801B25D8; +extern s32 D_801B25DC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B25B8; +extern s32 D_801B25BC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B3BE0; +extern u8 D_801B3C56; +extern u8 D_801B3B02; +extern u8 D_801B3BBC; +extern u8 D_801B3AE0; +extern u8 D_801B3B01; +extern s32 D_801B3BC0; +extern void func_8013D330(void); +extern void *D_801B2590; +extern void *D_801B2594; +extern void *D_801B2598; +extern s32 D_801B25C0; +extern s32 D_801B25C4; +extern s32 D_801B25C8; +extern s32 D_801B3B34[]; +extern u8 D_80184F00[]; +extern u8 D_80184FA8[]; +extern u8 D_80184E58[]; +extern u8 D_80184F54[]; +extern u8 D_80184FD4[]; +extern u8 D_80184EAC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B259C; +extern s32 D_801B25CC; +extern s32 D_801B25D0; +extern s32 D_801B25D4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B25B4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80185A60; +extern s32 D_80115188; +extern s16 D_80185A38; +extern s16 D_80185A3A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80185A3C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185718; +extern u8 *D_8018571C; +extern u8 *D_80185720; +extern u8 *D_80185724; +extern u8 *D_80185728; +extern u16 *D_8018572C[]; +extern u16 *D_80185734[]; +extern u16 *D_80185754[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185718; + iVar2 = func_80028D58(); + puVar3 = D_8018572C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018571C; + iVar2 = func_80028DE0(); + puVar3 = D_8018572C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185720 + 0x18) = *D_80185734[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185724 + 0x18) = *D_80185734[iVar2]; + + puVar1 = D_80185728; + iVar2 = func_80028D9C(); + puVar3 = D_80185754[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185654; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185654); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185664; +extern char *D_80185684; +extern char *D_80185688; +extern char *D_8018568C; +extern char *D_80185690; +extern char *D_80185694; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185664); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185684; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185688; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018568C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185690; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185694; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018551E; +extern unsigned short D_80185522; +extern unsigned short D_80185526; +extern unsigned short D_8018552A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018551E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185522; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185526; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018552A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80185AB4[])(void); + +void func_80141788(void) +{ + D_80185AB4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80185AC0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80185AC0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80185A38; +extern s16 D_80185A3A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801856D8; + extern u8 D_801856F0; + extern u8 D_80185764; + extern u8 D_8018576C; + extern void *D_801B25E8; + extern void *D_801B25EC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B25E8 = &D_801856D8; + D_801B25EC = &D_80185764; + } else { + D_801B25E8 = &D_801856F0; + D_801B25EC = &D_8018576C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80185A38 = 0xE; + D_80185A3A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80185A3C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80185A3C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80185A3C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185A14; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185A14 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80185AE4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80185AE4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80185AF4[])(void); + +void func_801425CC(void *a0) { + D_80185AF4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185AD8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185AD8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185B08[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185B08[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185B24[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185B24[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185CF4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185CF4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185DAC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185DAC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B1CCC; +extern u8 D_801B25F0; +extern u8 D_801B25F1; +extern u8 D_801B25F2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B1CCC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B25F0 = mul * (local.b[0] >> 4); + D_801B25F1 = mul * (local.b[1] >> 4); + D_801B25F2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80185AFC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185AFC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185B18[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185B18); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185CE4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185CE4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185D04[]; +extern unsigned char D_80185D64[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185D04); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185D64); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B1CC8; +extern u8 D_801B25F0; +extern u8 D_801B25F4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B1CC8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B25F0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B25F0, 0x10); + memcpy(&D_801B25F4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80185EBC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80185EBC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80185FE4[])(void); + +void func_80143B30(void *a0) { + D_80185FE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80185FF0[])(void); + +void func_80143C38(void *a0) { + D_80185FF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80185FF8[])(void); + +void func_80143C98(void *a0) { + D_80185FF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80143D28); + + +extern void (*D_80186040[])(void); + +void func_80143E68(void *a0) { + D_80186040[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186054[])(void); + +void func_80144054(void *a0) { + D_80186054[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018605C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018605C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185FD8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80185FD8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80185FEC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185FEC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185FEC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80186000; +extern u8 D_8018600C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80186000); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018600C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80185FD8; +extern u8 D_80186048; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80185FD8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186048, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186064[])(void); + +void func_801449C8(void *a0) { + D_80186064[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018606C[])(void); + +void func_80144A2C(void *a0) { + D_8018606C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c b/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c index 95e0d72f9..06bbfa6f7 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80188B4C; -extern u8 *D_80188B50; -extern u8 *D_80188B54; -extern u8 *D_80188B58; -extern u8 *D_80188B5C; -extern u16 *D_80188B60[]; -extern u16 *D_80188B68[]; -extern u16 *D_80188B88[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80188B4C; - iVar2 = func_80028D58(); - puVar3 = D_80188B60[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80188B50; - iVar2 = func_80028DE0(); - puVar3 = D_80188B60[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80188B54 + 0x18) = *D_80188B68[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80188B58 + 0x18) = *D_80188B68[iVar2]; - - puVar1 = D_80188B5C; - iVar2 = func_80028D9C(); - puVar3 = D_80188B88[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80188A88; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80188A88); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80188A98; -extern char *D_80188AB8; -extern char *D_80188ABC; -extern char *D_80188AC0; -extern char *D_80188AC4; -extern char *D_80188AC8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80188A98); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80188AB8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80188ABC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80188AC0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80188AC4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80188AC8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80188952; -extern unsigned short D_80188956; -extern unsigned short D_8018895A; -extern unsigned short D_8018895E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80188952; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80188956; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018895A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018895E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80188EE8[])(void); - -void func_80141788(void) -{ - D_80188EE8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80188EF4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80188EF4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80188E6C; -extern s16 D_80188E6E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80188B0C; - extern u8 D_80188B24; - extern u8 D_80188B98; - extern u8 D_80188BA0; - extern void *D_801C07C0; - extern void *D_801C07C4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C07C0 = &D_80188B0C; - D_801C07C4 = &D_80188B98; - } else { - D_801C07C0 = &D_80188B24; - D_801C07C4 = &D_80188BA0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80188E6C = 0xE; - D_80188E6E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80188E70: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80188E70; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80188E70); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80188E48; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80188E48 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80188F18[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80188F18[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80188F28[])(void); - -void func_801425CC(void *a0) { - D_80188F28[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80188F0C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80188F0C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188F3C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188F3C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188F58[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188F58[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189128[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189128[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801891E0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801891E0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801BFE90; -extern u8 D_801C07C8; -extern u8 D_801C07C9; -extern u8 D_801C07CA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801BFE90; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C07C8 = mul * (local.b[0] >> 4); - D_801C07C9 = mul * (local.b[1] >> 4); - D_801C07CA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80188F30; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188F30); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188F4C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188F4C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80189118[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80189118[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80189138[]; -extern unsigned char D_80189198[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80189138); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80189198); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801BFE8C; -extern u8 D_801C07C8; -extern u8 D_801C07CC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801BFE8C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C07C8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C07C8, 0x10); - memcpy(&D_801C07CC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801892F0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801892F0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80189418[])(void); - -void func_80143B30(void *a0) { - D_80189418[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80189424[])(void); - -void func_80143C38(void *a0) { - D_80189424[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018942C[])(void); - -void func_80143C98(void *a0) { - D_8018942C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80143D28); - - -extern void (*D_80189474[])(void); - -void func_80143E68(void *a0) { - D_80189474[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80189488[])(void); - -void func_80144054(void *a0) { - D_80189488[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80189490[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80189490[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018940C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018940C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80189420; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189420 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189420 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80189434; -extern u8 D_80189440; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189434); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189440); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018940C; -extern u8 D_8018947C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018940C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018947C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80189498[])(void); - -void func_801449C8(void *a0) { - D_80189498[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801894A0[])(void); - -void func_80144A2C(void *a0) { - D_801894A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_005/ov_SC04_005_jr_80140608.c b/src/ov_SC04_005/ov_SC04_005_jr_80140608.c new file mode 100644 index 000000000..b5d08aa3c --- /dev/null +++ b/src/ov_SC04_005/ov_SC04_005_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801BF500; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80187D8C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C067C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C22C0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801BF500; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80187AC8)(); +extern s16 (*D_80187ACC)(); +extern M2C_UNK (*D_80187AD4)(); +extern s32 (*D_80187AD8)(); +extern s32 D_801C0678; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801BF504; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80187E20; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018B304; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80187E38; +extern M2C_UNK D_80187E40; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80187E48; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80187E64[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80187E70[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80187E84[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80187ED4[]; +extern s16 D_80187F04[]; +extern s16 D_80187F64[]; +extern s16 D_80187F6C[]; +extern s16 D_80187F8C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80187FC4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018801C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80188064[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018806C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80188074[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018807C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80188024; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80188044; +extern void func_801321B0(int param_1); +extern int D_80188054; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C06E8; +extern s32 D_801C06EC[]; +extern int D_801C06F0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80188088; +extern u8 D_80188084; +extern s16 *D_8018808C; +extern u8 D_80188090; +extern int D_801C06E8; +extern u16 D_801C06F8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018808C; /* holds a pointer value (*(u16**)&D_8018808C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801880A0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801880F4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801880F8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018813C; +extern u8 D_80188180; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801881C4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018823C, D_8018823E, D_80188240, D_80188242, D_80188244, D_80188246; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C0760; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C0764; +extern s8 D_801C0765; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C0784; +extern s32 D_801C0778; +extern s32 D_801C077C; +extern s32 D_801C0788; +extern void func_8013CABC(void); +extern s32 D_801C0780; +extern void func_8013CAE8(void); +extern s32 D_801C07B0; +extern s32 D_801C07B4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C0790; +extern s32 D_801C0794; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C22BA; +extern u8 D_801C232E; +extern u8 D_801C21E2; +extern u8 D_801C229C; +extern u8 D_801C21C0; +extern u8 D_801C21E1; +extern s32 D_801C22A0; +extern void func_8013D330(void); +extern void *D_801C0768; +extern void *D_801C076C; +extern void *D_801C0770; +extern s32 D_801C0798; +extern s32 D_801C079C; +extern s32 D_801C07A0; +extern s32 D_801C2214[]; +extern u8 D_80188334[]; +extern u8 D_801883DC[]; +extern u8 D_8018828C[]; +extern u8 D_80188388[]; +extern u8 D_80188408[]; +extern u8 D_801882E0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C0774; +extern s32 D_801C07A4; +extern s32 D_801C07A8; +extern s32 D_801C07AC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C078C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80188E94; +extern s32 D_80115188; +extern s16 D_80188E6C; +extern s16 D_80188E6E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80188E70; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80188B4C; +extern u8 *D_80188B50; +extern u8 *D_80188B54; +extern u8 *D_80188B58; +extern u8 *D_80188B5C; +extern u16 *D_80188B60[]; +extern u16 *D_80188B68[]; +extern u16 *D_80188B88[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80188B4C; + iVar2 = func_80028D58(); + puVar3 = D_80188B60[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80188B50; + iVar2 = func_80028DE0(); + puVar3 = D_80188B60[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80188B54 + 0x18) = *D_80188B68[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80188B58 + 0x18) = *D_80188B68[iVar2]; + + puVar1 = D_80188B5C; + iVar2 = func_80028D9C(); + puVar3 = D_80188B88[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80188A88; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80188A88); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80188A98; +extern char *D_80188AB8; +extern char *D_80188ABC; +extern char *D_80188AC0; +extern char *D_80188AC4; +extern char *D_80188AC8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80188A98); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80188AB8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80188ABC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80188AC0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80188AC4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80188AC8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80188952; +extern unsigned short D_80188956; +extern unsigned short D_8018895A; +extern unsigned short D_8018895E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80188952; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80188956; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018895A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018895E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80188EE8[])(void); + +void func_80141788(void) +{ + D_80188EE8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80188EF4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80188EF4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80188E6C; +extern s16 D_80188E6E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80188B0C; + extern u8 D_80188B24; + extern u8 D_80188B98; + extern u8 D_80188BA0; + extern void *D_801C07C0; + extern void *D_801C07C4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C07C0 = &D_80188B0C; + D_801C07C4 = &D_80188B98; + } else { + D_801C07C0 = &D_80188B24; + D_801C07C4 = &D_80188BA0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80188E6C = 0xE; + D_80188E6E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80188E70: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80188E70; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80188E70); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80188E48; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80188E48 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80188F18[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80188F18[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80188F28[])(void); + +void func_801425CC(void *a0) { + D_80188F28[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80188F0C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80188F0C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188F3C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188F3C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188F58[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188F58[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189128[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189128[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801891E0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801891E0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801BFE90; +extern u8 D_801C07C8; +extern u8 D_801C07C9; +extern u8 D_801C07CA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801BFE90; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C07C8 = mul * (local.b[0] >> 4); + D_801C07C9 = mul * (local.b[1] >> 4); + D_801C07CA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80188F30; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80188F30); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188F4C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80188F4C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80189118[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80189118[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80189138[]; +extern unsigned char D_80189198[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80189138); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80189198); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801BFE8C; +extern u8 D_801C07C8; +extern u8 D_801C07CC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801BFE8C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C07C8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C07C8, 0x10); + memcpy(&D_801C07CC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801892F0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801892F0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80189418[])(void); + +void func_80143B30(void *a0) { + D_80189418[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80189424[])(void); + +void func_80143C38(void *a0) { + D_80189424[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018942C[])(void); + +void func_80143C98(void *a0) { + D_8018942C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80143D28); + + +extern void (*D_80189474[])(void); + +void func_80143E68(void *a0) { + D_80189474[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80189488[])(void); + +void func_80144054(void *a0) { + D_80189488[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80189490[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80189490[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018940C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018940C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80189420; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189420 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189420 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80189434; +extern u8 D_80189440; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189434); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189440); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018940C; +extern u8 D_8018947C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018940C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018947C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80189498[])(void); + +void func_801449C8(void *a0) { + D_80189498[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801894A0[])(void); + +void func_80144A2C(void *a0) { + D_801894A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c b/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c index baed16233..3270bcddd 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80180C2C; -extern u8 *D_80180C30; -extern u8 *D_80180C34; -extern u8 *D_80180C38; -extern u8 *D_80180C3C; -extern u16 *D_80180C40[]; -extern u16 *D_80180C48[]; -extern u16 *D_80180C68[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80180C2C; - iVar2 = func_80028D58(); - puVar3 = D_80180C40[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80180C30; - iVar2 = func_80028DE0(); - puVar3 = D_80180C40[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80180C34 + 0x18) = *D_80180C48[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80180C38 + 0x18) = *D_80180C48[iVar2]; - - puVar1 = D_80180C3C; - iVar2 = func_80028D9C(); - puVar3 = D_80180C68[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180B68; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180B68); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180B78; -extern char *D_80180B98; -extern char *D_80180B9C; -extern char *D_80180BA0; -extern char *D_80180BA4; -extern char *D_80180BA8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180B78); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180B98; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180B9C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180BA0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180BA4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180BA8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80180A32; -extern unsigned short D_80180A36; -extern unsigned short D_80180A3A; -extern unsigned short D_80180A3E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80180A32; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80180A36; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180A3A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180A3E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80180FC8[])(void); - -void func_80141788(void) -{ - D_80180FC8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180FD4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180FD4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80180F4C; -extern s16 D_80180F4E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180BEC; - extern u8 D_80180C04; - extern u8 D_80180C78; - extern u8 D_80180C80; - extern void *D_8019CA68; - extern void *D_8019CA6C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019CA68 = &D_80180BEC; - D_8019CA6C = &D_80180C78; - } else { - D_8019CA68 = &D_80180C04; - D_8019CA6C = &D_80180C80; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80180F4C = 0xE; - D_80180F4E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80180F50: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80180F50; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80180F50); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80180F28; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80180F28 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80180FF8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80180FF8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80181008[])(void); - -void func_801425CC(void *a0) { - D_80181008[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180FEC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180FEC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018101C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018101C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181038[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181038[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181208[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181208[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801812C0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801812C0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019C138; -extern u8 D_8019CA70; -extern u8 D_8019CA71; -extern u8 D_8019CA72; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019C138; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019CA70 = mul * (local.b[0] >> 4); - D_8019CA71 = mul * (local.b[1] >> 4); - D_8019CA72 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80181010; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181010); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018102C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018102C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801811F8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801811F8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181218[]; -extern unsigned char D_80181278[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181218); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80181278); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019C134; -extern u8 D_8019CA70; -extern u8 D_8019CA74; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019C134, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019CA70); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019CA70, 0x10); - memcpy(&D_8019CA74, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801813D0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801813D0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801814F8[])(void); - -void func_80143B30(void *a0) { - D_801814F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80181504[])(void); - -void func_80143C38(void *a0) { - D_80181504[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018150C[])(void); - -void func_80143C98(void *a0) { - D_8018150C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80143D28); - - -extern void (*D_80181554[])(void); - -void func_80143E68(void *a0) { - D_80181554[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80181568[])(void); - -void func_80144054(void *a0) { - D_80181568[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80181570[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80181570[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801814EC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801814EC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80181500; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181500 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181500 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80181514; -extern u8 D_80181520; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181514); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181520); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801814EC; -extern u8 D_8018155C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801814EC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018155C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80181578[])(void); - -void func_801449C8(void *a0) { - D_80181578[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80181580[])(void); - -void func_80144A2C(void *a0) { - D_80181580[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_006/ov_SC04_006_jr_80140608.c b/src/ov_SC04_006/ov_SC04_006_jr_80140608.c new file mode 100644 index 000000000..40d7cf3f4 --- /dev/null +++ b/src/ov_SC04_006/ov_SC04_006_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019B7A8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017FE6C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019C924; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019DD60; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019B7A8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017FBA8)(); +extern s16 (*D_8017FBAC)(); +extern M2C_UNK (*D_8017FBB4)(); +extern s32 (*D_8017FBB8)(); +extern s32 D_8019C920; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019B7AC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017FF00; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801833E4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017FF18; +extern M2C_UNK D_8017FF20; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017FF28; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017FF44[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017FF50[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017FF64[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017FFB4[]; +extern s16 D_8017FFE4[]; +extern s16 D_80180044[]; +extern s16 D_8018004C[]; +extern s16 D_8018006C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801800A4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801800FC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80180144[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018014C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80180154[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018015C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80180104; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80180124; +extern void func_801321B0(int param_1); +extern int D_80180134; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019C990; +extern s32 D_8019C994[]; +extern int D_8019C998; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80180168; +extern u8 D_80180164; +extern s16 *D_8018016C; +extern u8 D_80180170; +extern int D_8019C990; +extern u16 D_8019C9A0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018016C; /* holds a pointer value (*(u16**)&D_8018016C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80180180[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801801D4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801801D8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018021C; +extern u8 D_80180260; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801802A4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018031C, D_8018031E, D_80180320, D_80180322, D_80180324, D_80180326; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019CA08; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019CA0C; +extern s8 D_8019CA0D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019CA2C; +extern s32 D_8019CA20; +extern s32 D_8019CA24; +extern s32 D_8019CA30; +extern void func_8013CABC(void); +extern s32 D_8019CA28; +extern void func_8013CAE8(void); +extern s32 D_8019CA58; +extern s32 D_8019CA5C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019CA38; +extern s32 D_8019CA3C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019DD5A; +extern u8 D_8019DDCE; +extern u8 D_8019DC82; +extern u8 D_8019DD3C; +extern u8 D_8019DC60; +extern u8 D_8019DC81; +extern s32 D_8019DD40; +extern void func_8013D330(void); +extern void *D_8019CA10; +extern void *D_8019CA14; +extern void *D_8019CA18; +extern s32 D_8019CA40; +extern s32 D_8019CA44; +extern s32 D_8019CA48; +extern s32 D_8019DCB4[]; +extern u8 D_80180414[]; +extern u8 D_801804BC[]; +extern u8 D_8018036C[]; +extern u8 D_80180468[]; +extern u8 D_801804E8[]; +extern u8 D_801803C0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019CA1C; +extern s32 D_8019CA4C; +extern s32 D_8019CA50; +extern s32 D_8019CA54; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019CA34; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180F74; +extern s32 D_80115188; +extern s16 D_80180F4C; +extern s16 D_80180F4E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80180F50; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80180C2C; +extern u8 *D_80180C30; +extern u8 *D_80180C34; +extern u8 *D_80180C38; +extern u8 *D_80180C3C; +extern u16 *D_80180C40[]; +extern u16 *D_80180C48[]; +extern u16 *D_80180C68[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80180C2C; + iVar2 = func_80028D58(); + puVar3 = D_80180C40[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80180C30; + iVar2 = func_80028DE0(); + puVar3 = D_80180C40[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80180C34 + 0x18) = *D_80180C48[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80180C38 + 0x18) = *D_80180C48[iVar2]; + + puVar1 = D_80180C3C; + iVar2 = func_80028D9C(); + puVar3 = D_80180C68[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180B68; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180B68); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180B78; +extern char *D_80180B98; +extern char *D_80180B9C; +extern char *D_80180BA0; +extern char *D_80180BA4; +extern char *D_80180BA8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180B78); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180B98; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180B9C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180BA0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180BA4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180BA8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80180A32; +extern unsigned short D_80180A36; +extern unsigned short D_80180A3A; +extern unsigned short D_80180A3E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80180A32; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80180A36; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180A3A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180A3E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80180FC8[])(void); + +void func_80141788(void) +{ + D_80180FC8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180FD4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180FD4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80180F4C; +extern s16 D_80180F4E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180BEC; + extern u8 D_80180C04; + extern u8 D_80180C78; + extern u8 D_80180C80; + extern void *D_8019CA68; + extern void *D_8019CA6C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019CA68 = &D_80180BEC; + D_8019CA6C = &D_80180C78; + } else { + D_8019CA68 = &D_80180C04; + D_8019CA6C = &D_80180C80; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80180F4C = 0xE; + D_80180F4E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80180F50: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80180F50; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80180F50); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80180F28; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80180F28 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80180FF8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80180FF8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80181008[])(void); + +void func_801425CC(void *a0) { + D_80181008[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180FEC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180FEC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018101C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018101C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181038[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181038[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181208[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181208[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801812C0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801812C0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019C138; +extern u8 D_8019CA70; +extern u8 D_8019CA71; +extern u8 D_8019CA72; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019C138; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019CA70 = mul * (local.b[0] >> 4); + D_8019CA71 = mul * (local.b[1] >> 4); + D_8019CA72 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80181010; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181010); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018102C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018102C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801811F8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801811F8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181218[]; +extern unsigned char D_80181278[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181218); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80181278); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019C134; +extern u8 D_8019CA70; +extern u8 D_8019CA74; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019C134, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019CA70); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019CA70, 0x10); + memcpy(&D_8019CA74, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801813D0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801813D0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801814F8[])(void); + +void func_80143B30(void *a0) { + D_801814F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80181504[])(void); + +void func_80143C38(void *a0) { + D_80181504[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018150C[])(void); + +void func_80143C98(void *a0) { + D_8018150C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80143D28); + + +extern void (*D_80181554[])(void); + +void func_80143E68(void *a0) { + D_80181554[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80181568[])(void); + +void func_80144054(void *a0) { + D_80181568[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80181570[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80181570[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801814EC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801814EC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80181500; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181500 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181500 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80181514; +extern u8 D_80181520; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181514); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181520); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801814EC; +extern u8 D_8018155C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801814EC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018155C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80181578[])(void); + +void func_801449C8(void *a0) { + D_80181578[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80181580[])(void); + +void func_80144A2C(void *a0) { + D_80181580[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c b/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c index 01ebb27f0..c5a3f8755 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80186BE4; -extern u8 *D_80186BE8; -extern u8 *D_80186BEC; -extern u8 *D_80186BF0; -extern u8 *D_80186BF4; -extern u16 *D_80186BF8[]; -extern u16 *D_80186C00[]; -extern u16 *D_80186C20[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80186BE4; - iVar2 = func_80028D58(); - puVar3 = D_80186BF8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80186BE8; - iVar2 = func_80028DE0(); - puVar3 = D_80186BF8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80186BEC + 0x18) = *D_80186C00[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80186BF0 + 0x18) = *D_80186C00[iVar2]; - - puVar1 = D_80186BF4; - iVar2 = func_80028D9C(); - puVar3 = D_80186C20[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80186B20; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80186B20); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80186B30; -extern char *D_80186B50; -extern char *D_80186B54; -extern char *D_80186B58; -extern char *D_80186B5C; -extern char *D_80186B60; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80186B30); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80186B50; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186B54; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186B58; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186B5C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186B60; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801869EA; -extern unsigned short D_801869EE; -extern unsigned short D_801869F2; -extern unsigned short D_801869F6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801869EA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801869EE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801869F2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801869F6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186F80[])(void); - -void func_80141788(void) -{ - D_80186F80[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186F8C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186F8C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186F04; -extern s16 D_80186F06; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186BA4; - extern u8 D_80186BBC; - extern u8 D_80186C30; - extern u8 D_80186C38; - extern void *D_801B4020; - extern void *D_801B4024; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B4020 = &D_80186BA4; - D_801B4024 = &D_80186C30; - } else { - D_801B4020 = &D_80186BBC; - D_801B4024 = &D_80186C38; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186F04 = 0xE; - D_80186F06 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186F08: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186F08; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186F08); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186EE0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186EE0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186FB0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186FB0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186FC0[])(void); - -void func_801425CC(void *a0) { - D_80186FC0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186FA4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186FA4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186FD4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186FD4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186FF0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186FF0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801871C0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801871C0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187278[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187278[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B36F4; -extern u8 D_801B4028; -extern u8 D_801B4029; -extern u8 D_801B402A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B36F4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B4028 = mul * (local.b[0] >> 4); - D_801B4029 = mul * (local.b[1] >> 4); - D_801B402A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80186FC8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186FC8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186FE4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186FE4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801871B0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801871B0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801871D0[]; -extern unsigned char D_80187230[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801871D0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80187230); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B36F0; -extern u8 D_801B4028; -extern u8 D_801B402C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B36F0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B4028); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B4028, 0x10); - memcpy(&D_801B402C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80187388[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80187388[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801874B0[])(void); - -void func_80143B30(void *a0) { - D_801874B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801874BC[])(void); - -void func_80143C38(void *a0) { - D_801874BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801874C4[])(void); - -void func_80143C98(void *a0) { - D_801874C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018750C[])(void); - -void func_80143E68(void *a0) { - D_8018750C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80187520[])(void); - -void func_80144054(void *a0) { - D_80187520[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80187528[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80187528[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801874A4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801874A4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801874B8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801874B8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801874B8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801874CC; -extern u8 D_801874D8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801874CC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801874D8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801874A4; -extern u8 D_80187514; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801874A4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80187514, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80187530[])(void); - -void func_801449C8(void *a0) { - D_80187530[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80187538[])(void); - -void func_80144A2C(void *a0) { - D_80187538[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_007/ov_SC04_007_jr_80140608.c b/src/ov_SC04_007/ov_SC04_007_jr_80140608.c new file mode 100644 index 000000000..b96a00bde --- /dev/null +++ b/src/ov_SC04_007/ov_SC04_007_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B2D64; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80185E24[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B3EDC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B5B20; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B2D64; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80185B60)(); +extern s16 (*D_80185B64)(); +extern M2C_UNK (*D_80185B6C)(); +extern s32 (*D_80185B70)(); +extern s32 D_801B3ED8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B2D68; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80185EB8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018939C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185ED0; +extern M2C_UNK D_80185ED8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185EE0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185EFC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185F08[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185F1C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185F6C[]; +extern s16 D_80185F9C[]; +extern s16 D_80185FFC[]; +extern s16 D_80186004[]; +extern s16 D_80186024[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018605C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801860B4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801860FC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80186104[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018610C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80186114[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801860BC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801860DC; +extern void func_801321B0(int param_1); +extern int D_801860EC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B3F48; +extern s32 D_801B3F4C[]; +extern int D_801B3F50; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80186120; +extern u8 D_8018611C; +extern s16 *D_80186124; +extern u8 D_80186128; +extern int D_801B3F48; +extern u16 D_801B3F58; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186124; /* holds a pointer value (*(u16**)&D_80186124) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186138[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018618C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186190[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801861D4; +extern u8 D_80186218; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018625C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801862D4, D_801862D6, D_801862D8, D_801862DA, D_801862DC, D_801862DE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B3FC0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B3FC4; +extern s8 D_801B3FC5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B3FE4; +extern s32 D_801B3FD8; +extern s32 D_801B3FDC; +extern s32 D_801B3FE8; +extern void func_8013CABC(void); +extern s32 D_801B3FE0; +extern void func_8013CAE8(void); +extern s32 D_801B4010; +extern s32 D_801B4014; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B3FF0; +extern s32 D_801B3FF4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B5B1A; +extern u8 D_801B5B8E; +extern u8 D_801B5A42; +extern u8 D_801B5AFC; +extern u8 D_801B5A20; +extern u8 D_801B5A41; +extern s32 D_801B5B00; +extern void func_8013D330(void); +extern void *D_801B3FC8; +extern void *D_801B3FCC; +extern void *D_801B3FD0; +extern s32 D_801B3FF8; +extern s32 D_801B3FFC; +extern s32 D_801B4000; +extern s32 D_801B5A74[]; +extern u8 D_801863CC[]; +extern u8 D_80186474[]; +extern u8 D_80186324[]; +extern u8 D_80186420[]; +extern u8 D_801864A0[]; +extern u8 D_80186378[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B3FD4; +extern s32 D_801B4004; +extern s32 D_801B4008; +extern s32 D_801B400C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B3FEC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80186F2C; +extern s32 D_80115188; +extern s16 D_80186F04; +extern s16 D_80186F06; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186F08; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80186BE4; +extern u8 *D_80186BE8; +extern u8 *D_80186BEC; +extern u8 *D_80186BF0; +extern u8 *D_80186BF4; +extern u16 *D_80186BF8[]; +extern u16 *D_80186C00[]; +extern u16 *D_80186C20[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80186BE4; + iVar2 = func_80028D58(); + puVar3 = D_80186BF8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80186BE8; + iVar2 = func_80028DE0(); + puVar3 = D_80186BF8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80186BEC + 0x18) = *D_80186C00[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80186BF0 + 0x18) = *D_80186C00[iVar2]; + + puVar1 = D_80186BF4; + iVar2 = func_80028D9C(); + puVar3 = D_80186C20[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80186B20; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80186B20); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80186B30; +extern char *D_80186B50; +extern char *D_80186B54; +extern char *D_80186B58; +extern char *D_80186B5C; +extern char *D_80186B60; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80186B30); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80186B50; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186B54; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186B58; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186B5C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186B60; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801869EA; +extern unsigned short D_801869EE; +extern unsigned short D_801869F2; +extern unsigned short D_801869F6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801869EA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801869EE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801869F2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801869F6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186F80[])(void); + +void func_80141788(void) +{ + D_80186F80[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186F8C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186F8C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186F04; +extern s16 D_80186F06; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186BA4; + extern u8 D_80186BBC; + extern u8 D_80186C30; + extern u8 D_80186C38; + extern void *D_801B4020; + extern void *D_801B4024; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B4020 = &D_80186BA4; + D_801B4024 = &D_80186C30; + } else { + D_801B4020 = &D_80186BBC; + D_801B4024 = &D_80186C38; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186F04 = 0xE; + D_80186F06 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186F08: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186F08; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186F08); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186EE0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186EE0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186FB0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186FB0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186FC0[])(void); + +void func_801425CC(void *a0) { + D_80186FC0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186FA4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186FA4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186FD4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186FD4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186FF0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186FF0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801871C0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801871C0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187278[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187278[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B36F4; +extern u8 D_801B4028; +extern u8 D_801B4029; +extern u8 D_801B402A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B36F4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B4028 = mul * (local.b[0] >> 4); + D_801B4029 = mul * (local.b[1] >> 4); + D_801B402A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80186FC8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186FC8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186FE4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186FE4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801871B0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801871B0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801871D0[]; +extern unsigned char D_80187230[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801871D0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80187230); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B36F0; +extern u8 D_801B4028; +extern u8 D_801B402C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B36F0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B4028); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B4028, 0x10); + memcpy(&D_801B402C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80187388[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80187388[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801874B0[])(void); + +void func_80143B30(void *a0) { + D_801874B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801874BC[])(void); + +void func_80143C38(void *a0) { + D_801874BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801874C4[])(void); + +void func_80143C98(void *a0) { + D_801874C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80143D28); + + +extern void (*D_8018750C[])(void); + +void func_80143E68(void *a0) { + D_8018750C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80187520[])(void); + +void func_80144054(void *a0) { + D_80187520[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80187528[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80187528[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801874A4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801874A4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801874B8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801874B8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801874B8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801874CC; +extern u8 D_801874D8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801874CC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801874D8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801874A4; +extern u8 D_80187514; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801874A4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80187514, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80187530[])(void); + +void func_801449C8(void *a0) { + D_80187530[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80187538[])(void); + +void func_80144A2C(void *a0) { + D_80187538[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c b/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c index 630a2e9ee..c987f9764 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FB1C; -extern u8 *D_8017FB20; -extern u8 *D_8017FB24; -extern u8 *D_8017FB28; -extern u8 *D_8017FB2C; -extern u16 *D_8017FB30[]; -extern u16 *D_8017FB38[]; -extern u16 *D_8017FB58[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FB1C; - iVar2 = func_80028D58(); - puVar3 = D_8017FB30[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FB20; - iVar2 = func_80028DE0(); - puVar3 = D_8017FB30[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FB24 + 0x18) = *D_8017FB38[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FB28 + 0x18) = *D_8017FB38[iVar2]; - - puVar1 = D_8017FB2C; - iVar2 = func_80028D9C(); - puVar3 = D_8017FB58[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017FA58; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017FA58); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017FA68; -extern char *D_8017FA88; -extern char *D_8017FA8C; -extern char *D_8017FA90; -extern char *D_8017FA94; -extern char *D_8017FA98; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017FA68); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FA88; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA8C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA90; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA94; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA98; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F922; -extern unsigned short D_8017F926; -extern unsigned short D_8017F92A; -extern unsigned short D_8017F92E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F922; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F926; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F92A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F92E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017FEB8[])(void); - -void func_80141788(void) -{ - D_8017FEB8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017FEC4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FEC4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017FE3C; -extern s16 D_8017FE3E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017FADC; - extern u8 D_8017FAF4; - extern u8 D_8017FB68; - extern u8 D_8017FB70; - extern void *D_80190CF8; - extern void *D_80190CFC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80190CF8 = &D_8017FADC; - D_80190CFC = &D_8017FB68; - } else { - D_80190CF8 = &D_8017FAF4; - D_80190CFC = &D_8017FB70; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017FE3C = 0xE; - D_8017FE3E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017FE40: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017FE40; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017FE40); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017FE18; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017FE18 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FEE8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FEE8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017FEF8[])(void); - -void func_801425CC(void *a0) { - D_8017FEF8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FEDC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FEDC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FF0C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FF0C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FF28[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FF28[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801800F8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801800F8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801801B0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801801B0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801903DC; -extern u8 D_80190D00; -extern u8 D_80190D01; -extern u8 D_80190D02; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801903DC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80190D00 = mul * (local.b[0] >> 4); - D_80190D01 = mul * (local.b[1] >> 4); - D_80190D02 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017FF00; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FF00); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FF1C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FF1C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801800E8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801800E8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180108[]; -extern unsigned char D_80180168[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180108); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80180168); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801903D8; -extern u8 D_80190D00; -extern u8 D_80190D04; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801903D8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80190D00); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80190D00, 0x10); - memcpy(&D_80190D04, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801802C0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801802C0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801803E8[])(void); - -void func_80143B30(void *a0) { - D_801803E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801803F4[])(void); - -void func_80143C38(void *a0) { - D_801803F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801803FC[])(void); - -void func_80143C98(void *a0) { - D_801803FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180444[])(void); - -void func_80143E68(void *a0) { - D_80180444[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180458[])(void); - -void func_80144054(void *a0) { - D_80180458[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180460[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180460[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801803DC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801803DC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801803F0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801803F0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801803F0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180404; -extern u8 D_80180410; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180404); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180410); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801803DC; -extern u8 D_8018044C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801803DC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018044C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180468[])(void); - -void func_801449C8(void *a0) { - D_80180468[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180470[])(void); - -void func_80144A2C(void *a0) { - D_80180470[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_008/ov_SC04_008_jr_80140608.c b/src/ov_SC04_008/ov_SC04_008_jr_80140608.c new file mode 100644 index 000000000..8ad685e0f --- /dev/null +++ b/src/ov_SC04_008/ov_SC04_008_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018FA4C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017ED5C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80190BB4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80193450; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018FA4C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EA98)(); +extern s16 (*D_8017EA9C)(); +extern M2C_UNK (*D_8017EAA4)(); +extern s32 (*D_8017EAA8)(); +extern s32 D_80190BB0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018FA50; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017EDF0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801822D4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017EE08; +extern M2C_UNK D_8017EE10; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017EE18; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017EE34[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017EE40[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017EE54[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017EEA4[]; +extern s16 D_8017EED4[]; +extern s16 D_8017EF34[]; +extern s16 D_8017EF3C[]; +extern s16 D_8017EF5C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017EF94[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017EFEC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F034[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F03C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F044[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F04C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017EFF4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F014; +extern void func_801321B0(int param_1); +extern int D_8017F024; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80190C20; +extern s32 D_80190C24[]; +extern int D_80190C28; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F058; +extern u8 D_8017F054; +extern s16 *D_8017F05C; +extern u8 D_8017F060; +extern int D_80190C20; +extern u16 D_80190C30; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F05C; /* holds a pointer value (*(u16**)&D_8017F05C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F070[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F0C4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F0C8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F10C; +extern u8 D_8017F150; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F194[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F20C, D_8017F20E, D_8017F210, D_8017F212, D_8017F214, D_8017F216; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80190C98; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80190C9C; +extern s8 D_80190C9D; +extern void func_8013C9C4(void * arg0); +extern s32 D_80190CBC; +extern s32 D_80190CB0; +extern s32 D_80190CB4; +extern s32 D_80190CC0; +extern void func_8013CABC(void); +extern s32 D_80190CB8; +extern void func_8013CAE8(void); +extern s32 D_80190CE8; +extern s32 D_80190CEC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80190CC8; +extern s32 D_80190CCC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019344A; +extern u8 D_801934BE; +extern u8 D_80193372; +extern u8 D_8019342C; +extern u8 D_80193350; +extern u8 D_80193371; +extern s32 D_80193430; +extern void func_8013D330(void); +extern void *D_80190CA0; +extern void *D_80190CA4; +extern void *D_80190CA8; +extern s32 D_80190CD0; +extern s32 D_80190CD4; +extern s32 D_80190CD8; +extern s32 D_801933A4[]; +extern u8 D_8017F304[]; +extern u8 D_8017F3AC[]; +extern u8 D_8017F25C[]; +extern u8 D_8017F358[]; +extern u8 D_8017F3D8[]; +extern u8 D_8017F2B0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80190CAC; +extern s32 D_80190CDC; +extern s32 D_80190CE0; +extern s32 D_80190CE4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80190CC4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017FE64; +extern s32 D_80115188; +extern s16 D_8017FE3C; +extern s16 D_8017FE3E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017FE40; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FB1C; +extern u8 *D_8017FB20; +extern u8 *D_8017FB24; +extern u8 *D_8017FB28; +extern u8 *D_8017FB2C; +extern u16 *D_8017FB30[]; +extern u16 *D_8017FB38[]; +extern u16 *D_8017FB58[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FB1C; + iVar2 = func_80028D58(); + puVar3 = D_8017FB30[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FB20; + iVar2 = func_80028DE0(); + puVar3 = D_8017FB30[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FB24 + 0x18) = *D_8017FB38[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FB28 + 0x18) = *D_8017FB38[iVar2]; + + puVar1 = D_8017FB2C; + iVar2 = func_80028D9C(); + puVar3 = D_8017FB58[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017FA58; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017FA58); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017FA68; +extern char *D_8017FA88; +extern char *D_8017FA8C; +extern char *D_8017FA90; +extern char *D_8017FA94; +extern char *D_8017FA98; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017FA68); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FA88; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA8C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA90; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA94; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA98; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F922; +extern unsigned short D_8017F926; +extern unsigned short D_8017F92A; +extern unsigned short D_8017F92E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F922; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F926; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F92A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F92E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017FEB8[])(void); + +void func_80141788(void) +{ + D_8017FEB8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017FEC4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FEC4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017FE3C; +extern s16 D_8017FE3E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017FADC; + extern u8 D_8017FAF4; + extern u8 D_8017FB68; + extern u8 D_8017FB70; + extern void *D_80190CF8; + extern void *D_80190CFC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80190CF8 = &D_8017FADC; + D_80190CFC = &D_8017FB68; + } else { + D_80190CF8 = &D_8017FAF4; + D_80190CFC = &D_8017FB70; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017FE3C = 0xE; + D_8017FE3E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017FE40: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017FE40; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017FE40); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017FE18; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017FE18 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FEE8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FEE8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017FEF8[])(void); + +void func_801425CC(void *a0) { + D_8017FEF8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FEDC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FEDC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FF0C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FF0C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FF28[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FF28[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801800F8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801800F8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801801B0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801801B0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801903DC; +extern u8 D_80190D00; +extern u8 D_80190D01; +extern u8 D_80190D02; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801903DC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80190D00 = mul * (local.b[0] >> 4); + D_80190D01 = mul * (local.b[1] >> 4); + D_80190D02 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017FF00; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FF00); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FF1C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FF1C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801800E8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801800E8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180108[]; +extern unsigned char D_80180168[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180108); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80180168); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801903D8; +extern u8 D_80190D00; +extern u8 D_80190D04; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801903D8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80190D00); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80190D00, 0x10); + memcpy(&D_80190D04, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801802C0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801802C0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801803E8[])(void); + +void func_80143B30(void *a0) { + D_801803E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801803F4[])(void); + +void func_80143C38(void *a0) { + D_801803F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801803FC[])(void); + +void func_80143C98(void *a0) { + D_801803FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80143D28); + + +extern void (*D_80180444[])(void); + +void func_80143E68(void *a0) { + D_80180444[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180458[])(void); + +void func_80144054(void *a0) { + D_80180458[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180460[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180460[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801803DC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801803DC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801803F0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801803F0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801803F0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180404; +extern u8 D_80180410; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180404); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180410); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801803DC; +extern u8 D_8018044C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801803DC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018044C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180468[])(void); + +void func_801449C8(void *a0) { + D_80180468[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180470[])(void); + +void func_80144A2C(void *a0) { + D_80180470[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c b/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c index 4b4408170..9c1848258 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FB48; -extern u8 *D_8017FB4C; -extern u8 *D_8017FB50; -extern u8 *D_8017FB54; -extern u8 *D_8017FB58; -extern u16 *D_8017FB5C[]; -extern u16 *D_8017FB64[]; -extern u16 *D_8017FB84[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FB48; - iVar2 = func_80028D58(); - puVar3 = D_8017FB5C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FB4C; - iVar2 = func_80028DE0(); - puVar3 = D_8017FB5C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FB50 + 0x18) = *D_8017FB64[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FB54 + 0x18) = *D_8017FB64[iVar2]; - - puVar1 = D_8017FB58; - iVar2 = func_80028D9C(); - puVar3 = D_8017FB84[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017FA84; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017FA84); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017FA94; -extern char *D_8017FAB4; -extern char *D_8017FAB8; -extern char *D_8017FABC; -extern char *D_8017FAC0; -extern char *D_8017FAC4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017FA94); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FAB4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FAB8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FABC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FAC0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FAC4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F94E; -extern unsigned short D_8017F952; -extern unsigned short D_8017F956; -extern unsigned short D_8017F95A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F94E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F952; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F956; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F95A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017FEE4[])(void); - -void func_80141788(void) -{ - D_8017FEE4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017FEF0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FEF0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017FE68; -extern s16 D_8017FE6A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017FB08; - extern u8 D_8017FB20; - extern u8 D_8017FB94; - extern u8 D_8017FB9C; - extern void *D_80196F08; - extern void *D_80196F0C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80196F08 = &D_8017FB08; - D_80196F0C = &D_8017FB94; - } else { - D_80196F08 = &D_8017FB20; - D_80196F0C = &D_8017FB9C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017FE68 = 0xE; - D_8017FE6A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017FE6C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017FE6C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017FE6C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017FE44; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017FE44 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FF14[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FF14[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017FF24[])(void); - -void func_801425CC(void *a0) { - D_8017FF24[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FF08; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FF08); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FF38[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FF38[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FF54[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FF54[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180124[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180124[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801801DC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801801DC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801965F0; -extern u8 D_80196F10; -extern u8 D_80196F11; -extern u8 D_80196F12; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801965F0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80196F10 = mul * (local.b[0] >> 4); - D_80196F11 = mul * (local.b[1] >> 4); - D_80196F12 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017FF2C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FF2C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FF48[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FF48); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80180114[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80180114[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180134[]; -extern unsigned char D_80180194[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180134); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80180194); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801965EC; -extern u8 D_80196F10; -extern u8 D_80196F14; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801965EC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80196F10); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80196F10, 0x10); - memcpy(&D_80196F14, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801802EC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801802EC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180414[])(void); - -void func_80143B30(void *a0) { - D_80180414[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180420[])(void); - -void func_80143C38(void *a0) { - D_80180420[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180428[])(void); - -void func_80143C98(void *a0) { - D_80180428[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180470[])(void); - -void func_80143E68(void *a0) { - D_80180470[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180484[])(void); - -void func_80144054(void *a0) { - D_80180484[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018048C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018048C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180408; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180408, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018041C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018041C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018041C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180430; -extern u8 D_8018043C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180430); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018043C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180408; -extern u8 D_80180478; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180408, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180478, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180494[])(void); - -void func_801449C8(void *a0) { - D_80180494[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018049C[])(void); - -void func_80144A2C(void *a0) { - D_8018049C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_009/ov_SC04_009_jr_80140608.c b/src/ov_SC04_009/ov_SC04_009_jr_80140608.c new file mode 100644 index 000000000..22fac639c --- /dev/null +++ b/src/ov_SC04_009/ov_SC04_009_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80195C60; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017ED88[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80196DC4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80198200; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80195C60; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EAC4)(); +extern s16 (*D_8017EAC8)(); +extern M2C_UNK (*D_8017EAD0)(); +extern s32 (*D_8017EAD4)(); +extern s32 D_80196DC0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80195C64; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017EE1C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182300; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017EE34; +extern M2C_UNK D_8017EE3C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017EE44; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017EE60[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017EE6C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017EE80[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017EED0[]; +extern s16 D_8017EF00[]; +extern s16 D_8017EF60[]; +extern s16 D_8017EF68[]; +extern s16 D_8017EF88[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017EFC0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F018[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F060[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F068[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F070[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F078[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F020; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F040; +extern void func_801321B0(int param_1); +extern int D_8017F050; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80196E30; +extern s32 D_80196E34[]; +extern int D_80196E38; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F084; +extern u8 D_8017F080; +extern s16 *D_8017F088; +extern u8 D_8017F08C; +extern int D_80196E30; +extern u16 D_80196E40; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F088; /* holds a pointer value (*(u16**)&D_8017F088) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F09C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F0F0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F0F4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F138; +extern u8 D_8017F17C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F1C0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F238, D_8017F23A, D_8017F23C, D_8017F23E, D_8017F240, D_8017F242; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80196EA8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80196EAC; +extern s8 D_80196EAD; +extern void func_8013C9C4(void * arg0); +extern s32 D_80196ECC; +extern s32 D_80196EC0; +extern s32 D_80196EC4; +extern s32 D_80196ED0; +extern void func_8013CABC(void); +extern s32 D_80196EC8; +extern void func_8013CAE8(void); +extern s32 D_80196EF8; +extern s32 D_80196EFC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80196ED8; +extern s32 D_80196EDC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801981FA; +extern u8 D_8019826E; +extern u8 D_80198122; +extern u8 D_801981DC; +extern u8 D_80198100; +extern u8 D_80198121; +extern s32 D_801981E0; +extern void func_8013D330(void); +extern void *D_80196EB0; +extern void *D_80196EB4; +extern void *D_80196EB8; +extern s32 D_80196EE0; +extern s32 D_80196EE4; +extern s32 D_80196EE8; +extern s32 D_80198154[]; +extern u8 D_8017F330[]; +extern u8 D_8017F3D8[]; +extern u8 D_8017F288[]; +extern u8 D_8017F384[]; +extern u8 D_8017F404[]; +extern u8 D_8017F2DC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80196EBC; +extern s32 D_80196EEC; +extern s32 D_80196EF0; +extern s32 D_80196EF4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80196ED4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017FE90; +extern s32 D_80115188; +extern s16 D_8017FE68; +extern s16 D_8017FE6A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017FE6C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FB48; +extern u8 *D_8017FB4C; +extern u8 *D_8017FB50; +extern u8 *D_8017FB54; +extern u8 *D_8017FB58; +extern u16 *D_8017FB5C[]; +extern u16 *D_8017FB64[]; +extern u16 *D_8017FB84[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FB48; + iVar2 = func_80028D58(); + puVar3 = D_8017FB5C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FB4C; + iVar2 = func_80028DE0(); + puVar3 = D_8017FB5C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FB50 + 0x18) = *D_8017FB64[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FB54 + 0x18) = *D_8017FB64[iVar2]; + + puVar1 = D_8017FB58; + iVar2 = func_80028D9C(); + puVar3 = D_8017FB84[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017FA84; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017FA84); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017FA94; +extern char *D_8017FAB4; +extern char *D_8017FAB8; +extern char *D_8017FABC; +extern char *D_8017FAC0; +extern char *D_8017FAC4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017FA94); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FAB4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FAB8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FABC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FAC0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FAC4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F94E; +extern unsigned short D_8017F952; +extern unsigned short D_8017F956; +extern unsigned short D_8017F95A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F94E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F952; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F956; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F95A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017FEE4[])(void); + +void func_80141788(void) +{ + D_8017FEE4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017FEF0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FEF0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017FE68; +extern s16 D_8017FE6A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017FB08; + extern u8 D_8017FB20; + extern u8 D_8017FB94; + extern u8 D_8017FB9C; + extern void *D_80196F08; + extern void *D_80196F0C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80196F08 = &D_8017FB08; + D_80196F0C = &D_8017FB94; + } else { + D_80196F08 = &D_8017FB20; + D_80196F0C = &D_8017FB9C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017FE68 = 0xE; + D_8017FE6A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017FE6C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017FE6C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017FE6C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017FE44; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017FE44 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FF14[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FF14[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017FF24[])(void); + +void func_801425CC(void *a0) { + D_8017FF24[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FF08; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FF08); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FF38[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FF38[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FF54[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FF54[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180124[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180124[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801801DC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801801DC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801965F0; +extern u8 D_80196F10; +extern u8 D_80196F11; +extern u8 D_80196F12; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801965F0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80196F10 = mul * (local.b[0] >> 4); + D_80196F11 = mul * (local.b[1] >> 4); + D_80196F12 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017FF2C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FF2C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FF48[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FF48); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80180114[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80180114[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180134[]; +extern unsigned char D_80180194[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180134); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80180194); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801965EC; +extern u8 D_80196F10; +extern u8 D_80196F14; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801965EC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80196F10); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80196F10, 0x10); + memcpy(&D_80196F14, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801802EC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801802EC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180414[])(void); + +void func_80143B30(void *a0) { + D_80180414[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180420[])(void); + +void func_80143C38(void *a0) { + D_80180420[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180428[])(void); + +void func_80143C98(void *a0) { + D_80180428[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80143D28); + + +extern void (*D_80180470[])(void); + +void func_80143E68(void *a0) { + D_80180470[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180484[])(void); + +void func_80144054(void *a0) { + D_80180484[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018048C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018048C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180408; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180408, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018041C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018041C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018041C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180430; +extern u8 D_8018043C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180430); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018043C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180408; +extern u8 D_80180478; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180408, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180478, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180494[])(void); + +void func_801449C8(void *a0) { + D_80180494[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018049C[])(void); + +void func_80144A2C(void *a0) { + D_8018049C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c b/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c index e37fc1adb..a0826cb48 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F1F4; -extern u8 *D_8017F1F8; -extern u8 *D_8017F1FC; -extern u8 *D_8017F200; -extern u8 *D_8017F204; -extern u16 *D_8017F208[]; -extern u16 *D_8017F210[]; -extern u16 *D_8017F230[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F1F4; - iVar2 = func_80028D58(); - puVar3 = D_8017F208[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F1F8; - iVar2 = func_80028DE0(); - puVar3 = D_8017F208[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F1FC + 0x18) = *D_8017F210[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F200 + 0x18) = *D_8017F210[iVar2]; - - puVar1 = D_8017F204; - iVar2 = func_80028D9C(); - puVar3 = D_8017F230[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F130; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F130); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F140; -extern char *D_8017F160; -extern char *D_8017F164; -extern char *D_8017F168; -extern char *D_8017F16C; -extern char *D_8017F170; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F140); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F160; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F164; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F168; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F16C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F170; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017EFFA; -extern unsigned short D_8017EFFE; -extern unsigned short D_8017F002; -extern unsigned short D_8017F006; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017EFFA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EFFE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F002; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F006; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F590[])(void); - -void func_80141788(void) -{ - D_8017F590[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F59C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F59C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F514; -extern s16 D_8017F516; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F1B4; - extern u8 D_8017F1CC; - extern u8 D_8017F240; - extern u8 D_8017F248; - extern void *D_8018E3A0; - extern void *D_8018E3A4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018E3A0 = &D_8017F1B4; - D_8018E3A4 = &D_8017F240; - } else { - D_8018E3A0 = &D_8017F1CC; - D_8018E3A4 = &D_8017F248; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F514 = 0xE; - D_8017F516 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F518: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F518; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F518); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F4F0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F4F0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F5C0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F5C0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F5D0[])(void); - -void func_801425CC(void *a0) { - D_8017F5D0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F5B4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F5B4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F5E4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F5E4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F600[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F600[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F7D0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F7D0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F888[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F888[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018DA7C; -extern u8 D_8018E3A8; -extern u8 D_8018E3A9; -extern u8 D_8018E3AA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018DA7C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018E3A8 = mul * (local.b[0] >> 4); - D_8018E3A9 = mul * (local.b[1] >> 4); - D_8018E3AA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F5D8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F5D8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F5F4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F5F4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F7C0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F7C0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F7E0[]; -extern unsigned char D_8017F840[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F7E0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F840); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018DA78; -extern u8 D_8018E3A8; -extern u8 D_8018E3AC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018DA78, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E3A8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018E3A8, 0x10); - memcpy(&D_8018E3AC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017F998[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017F998[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017FAC0[])(void); - -void func_80143B30(void *a0) { - D_8017FAC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017FACC[])(void); - -void func_80143C38(void *a0) { - D_8017FACC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017FAD4[])(void); - -void func_80143C98(void *a0) { - D_8017FAD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017FB1C[])(void); - -void func_80143E68(void *a0) { - D_8017FB1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017FB30[])(void); - -void func_80144054(void *a0) { - D_8017FB30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017FB38[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017FB38[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017FAB4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FAB4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017FAC8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FAC8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FAC8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017FADC; -extern u8 D_8017FAE8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FADC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FAE8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017FAB4; -extern u8 D_8017FB24; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FAB4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017FB24, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017FB40[])(void); - -void func_801449C8(void *a0) { - D_8017FB40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017FB48[])(void); - -void func_80144A2C(void *a0) { - D_8017FB48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_010/ov_SC04_010_jr_80140608.c b/src/ov_SC04_010/ov_SC04_010_jr_80140608.c new file mode 100644 index 000000000..07a465d6d --- /dev/null +++ b/src/ov_SC04_010/ov_SC04_010_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018D0EC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E434[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018E25C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8018F6D8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018D0EC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017E170)(); +extern s16 (*D_8017E174)(); +extern M2C_UNK (*D_8017E17C)(); +extern s32 (*D_8017E180)(); +extern s32 D_8018E258; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D0F0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E4C8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801819AC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E4E0; +extern M2C_UNK D_8017E4E8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E4F0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E50C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E518[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E52C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E57C[]; +extern s16 D_8017E5AC[]; +extern s16 D_8017E60C[]; +extern s16 D_8017E614[]; +extern s16 D_8017E634[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E66C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E6C4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E70C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E714[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E71C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E724[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E6CC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E6EC; +extern void func_801321B0(int param_1); +extern int D_8017E6FC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018E2C8; +extern s32 D_8018E2CC[]; +extern int D_8018E2D0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E730; +extern u8 D_8017E72C; +extern s16 *D_8017E734; +extern u8 D_8017E738; +extern int D_8018E2C8; +extern u16 D_8018E2D8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E734; /* holds a pointer value (*(u16**)&D_8017E734) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E748[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E79C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E7A0[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E7E4; +extern u8 D_8017E828; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E86C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E8E4, D_8017E8E6, D_8017E8E8, D_8017E8EA, D_8017E8EC, D_8017E8EE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018E340; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018E344; +extern s8 D_8018E345; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018E364; +extern s32 D_8018E358; +extern s32 D_8018E35C; +extern s32 D_8018E368; +extern void func_8013CABC(void); +extern s32 D_8018E360; +extern void func_8013CAE8(void); +extern s32 D_8018E390; +extern s32 D_8018E394; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018E370; +extern s32 D_8018E374; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8018F6D2; +extern u8 D_8018F746; +extern u8 D_8018F5FA; +extern u8 D_8018F6B4; +extern u8 D_8018F5D8; +extern u8 D_8018F5F9; +extern s32 D_8018F6B8; +extern void func_8013D330(void); +extern void *D_8018E348; +extern void *D_8018E34C; +extern void *D_8018E350; +extern s32 D_8018E378; +extern s32 D_8018E37C; +extern s32 D_8018E380; +extern s32 D_8018F62C[]; +extern u8 D_8017E9DC[]; +extern u8 D_8017EA84[]; +extern u8 D_8017E934[]; +extern u8 D_8017EA30[]; +extern u8 D_8017EAB0[]; +extern u8 D_8017E988[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018E354; +extern s32 D_8018E384; +extern s32 D_8018E388; +extern s32 D_8018E38C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018E36C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F53C; +extern s32 D_80115188; +extern s16 D_8017F514; +extern s16 D_8017F516; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F518; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F1F4; +extern u8 *D_8017F1F8; +extern u8 *D_8017F1FC; +extern u8 *D_8017F200; +extern u8 *D_8017F204; +extern u16 *D_8017F208[]; +extern u16 *D_8017F210[]; +extern u16 *D_8017F230[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F1F4; + iVar2 = func_80028D58(); + puVar3 = D_8017F208[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F1F8; + iVar2 = func_80028DE0(); + puVar3 = D_8017F208[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F1FC + 0x18) = *D_8017F210[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F200 + 0x18) = *D_8017F210[iVar2]; + + puVar1 = D_8017F204; + iVar2 = func_80028D9C(); + puVar3 = D_8017F230[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F130; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F130); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F140; +extern char *D_8017F160; +extern char *D_8017F164; +extern char *D_8017F168; +extern char *D_8017F16C; +extern char *D_8017F170; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F140); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F160; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F164; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F168; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F16C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F170; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017EFFA; +extern unsigned short D_8017EFFE; +extern unsigned short D_8017F002; +extern unsigned short D_8017F006; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017EFFA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EFFE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F002; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F006; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F590[])(void); + +void func_80141788(void) +{ + D_8017F590[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F59C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F59C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F514; +extern s16 D_8017F516; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F1B4; + extern u8 D_8017F1CC; + extern u8 D_8017F240; + extern u8 D_8017F248; + extern void *D_8018E3A0; + extern void *D_8018E3A4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018E3A0 = &D_8017F1B4; + D_8018E3A4 = &D_8017F240; + } else { + D_8018E3A0 = &D_8017F1CC; + D_8018E3A4 = &D_8017F248; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F514 = 0xE; + D_8017F516 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F518: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F518; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F518); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F4F0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F4F0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F5C0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F5C0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F5D0[])(void); + +void func_801425CC(void *a0) { + D_8017F5D0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F5B4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F5B4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F5E4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F5E4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F600[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F600[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F7D0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F7D0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F888[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F888[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018DA7C; +extern u8 D_8018E3A8; +extern u8 D_8018E3A9; +extern u8 D_8018E3AA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018DA7C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018E3A8 = mul * (local.b[0] >> 4); + D_8018E3A9 = mul * (local.b[1] >> 4); + D_8018E3AA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F5D8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F5D8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F5F4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F5F4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F7C0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F7C0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F7E0[]; +extern unsigned char D_8017F840[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F7E0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F840); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018DA78; +extern u8 D_8018E3A8; +extern u8 D_8018E3AC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018DA78, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E3A8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018E3A8, 0x10); + memcpy(&D_8018E3AC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017F998[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017F998[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017FAC0[])(void); + +void func_80143B30(void *a0) { + D_8017FAC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017FACC[])(void); + +void func_80143C38(void *a0) { + D_8017FACC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017FAD4[])(void); + +void func_80143C98(void *a0) { + D_8017FAD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80143D28); + + +extern void (*D_8017FB1C[])(void); + +void func_80143E68(void *a0) { + D_8017FB1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017FB30[])(void); + +void func_80144054(void *a0) { + D_8017FB30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017FB38[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017FB38[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017FAB4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FAB4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017FAC8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FAC8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FAC8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017FADC; +extern u8 D_8017FAE8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FADC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FAE8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017FAB4; +extern u8 D_8017FB24; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FAB4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017FB24, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017FB40[])(void); + +void func_801449C8(void *a0) { + D_8017FB40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017FB48[])(void); + +void func_80144A2C(void *a0) { + D_8017FB48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c b/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c index 9f7fdcd2a..62b8b3af4 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80191484; -extern u8 *D_80191488; -extern u8 *D_8019148C; -extern u8 *D_80191490; -extern u8 *D_80191494; -extern u16 *D_80191498[]; -extern u16 *D_801914A0[]; -extern u16 *D_801914C0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80191484; - iVar2 = func_80028D58(); - puVar3 = D_80191498[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80191488; - iVar2 = func_80028DE0(); - puVar3 = D_80191498[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8019148C + 0x18) = *D_801914A0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80191490 + 0x18) = *D_801914A0[iVar2]; - - puVar1 = D_80191494; - iVar2 = func_80028D9C(); - puVar3 = D_801914C0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801913C0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801913C0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801913D0; -extern char *D_801913F0; -extern char *D_801913F4; -extern char *D_801913F8; -extern char *D_801913FC; -extern char *D_80191400; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801913D0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801913F0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801913F4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801913F8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801913FC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80191400; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8019128A; -extern unsigned short D_8019128E; -extern unsigned short D_80191292; -extern unsigned short D_80191296; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8019128A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8019128E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80191292; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80191296; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80191820[])(void); - -void func_80141788(void) -{ - D_80191820[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8019182C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8019182C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801917A4; -extern s16 D_801917A6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80191444; - extern u8 D_8019145C; - extern u8 D_801914D0; - extern u8 D_801914D8; - extern void *D_801EDB08; - extern void *D_801EDB0C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801EDB08 = &D_80191444; - D_801EDB0C = &D_801914D0; - } else { - D_801EDB08 = &D_8019145C; - D_801EDB0C = &D_801914D8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801917A4 = 0xE; - D_801917A6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801917A8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801917A8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801917A8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80191780; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80191780 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80191850[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80191850[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80191860[])(void); - -void func_801425CC(void *a0) { - D_80191860[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80191844; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80191844); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191874[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191874[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191890[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191890[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191A60[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191A60[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80191B18[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80191B18[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801ED018; -extern u8 D_801EDB10; -extern u8 D_801EDB11; -extern u8 D_801EDB12; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801ED018; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801EDB10 = mul * (local.b[0] >> 4); - D_801EDB11 = mul * (local.b[1] >> 4); - D_801EDB12 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80191868; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80191868); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80191884[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80191884); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80191A50[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80191A50[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80191A70[]; -extern unsigned char D_80191AD0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80191A70); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80191AD0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801ED014; -extern u8 D_801EDB10; -extern u8 D_801EDB14; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801ED014, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801EDB10); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801EDB10, 0x10); - memcpy(&D_801EDB14, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80191C28[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80191C28[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80191D50[])(void); - -void func_80143B30(void *a0) { - D_80191D50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80191D5C[])(void); - -void func_80143C38(void *a0) { - D_80191D5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80191D64[])(void); - -void func_80143C98(void *a0) { - D_80191D64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80143D28); - - -extern void (*D_80191DAC[])(void); - -void func_80143E68(void *a0) { - D_80191DAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80191DC0[])(void); - -void func_80144054(void *a0) { - D_80191DC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80191DC8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80191DC8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80191D44; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80191D44, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80191D58; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80191D58 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80191D58 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80191D6C; -extern u8 D_80191D78; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80191D6C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80191D78); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80191D44; -extern u8 D_80191DB4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80191D44, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80191DB4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80191DD0[])(void); - -void func_801449C8(void *a0) { - D_80191DD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80191DD8[])(void); - -void func_80144A2C(void *a0) { - D_80191DD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_011/ov_SC04_011_jr_80140608.c b/src/ov_SC04_011/ov_SC04_011_jr_80140608.c new file mode 100644 index 000000000..0a9733f49 --- /dev/null +++ b/src/ov_SC04_011/ov_SC04_011_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801EC688; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801906C4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801ED9C4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801F1640; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801EC688; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80190400)(); +extern s16 (*D_80190404)(); +extern M2C_UNK (*D_8019040C)(); +extern s32 (*D_80190410)(); +extern s32 D_801ED9C0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801EC68C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80190758; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80193C3C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80190770; +extern M2C_UNK D_80190778; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80190780; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8019079C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801907A8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801907BC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8019080C[]; +extern s16 D_8019083C[]; +extern s16 D_8019089C[]; +extern s16 D_801908A4[]; +extern s16 D_801908C4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801908FC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80190954[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8019099C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801909A4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801909AC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801909B4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8019095C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8019097C; +extern void func_801321B0(int param_1); +extern int D_8019098C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801EDA30; +extern s32 D_801EDA34[]; +extern int D_801EDA38; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801909C0; +extern u8 D_801909BC; +extern s16 *D_801909C4; +extern u8 D_801909C8; +extern int D_801EDA30; +extern u16 D_801EDA40; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801909C4; /* holds a pointer value (*(u16**)&D_801909C4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801909D8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80190A2C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80190A30[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80190A74; +extern u8 D_80190AB8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80190AFC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80190B74, D_80190B76, D_80190B78, D_80190B7A, D_80190B7C, D_80190B7E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801EDAA8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801EDAAC; +extern s8 D_801EDAAD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801EDACC; +extern s32 D_801EDAC0; +extern s32 D_801EDAC4; +extern s32 D_801EDAD0; +extern void func_8013CABC(void); +extern s32 D_801EDAC8; +extern void func_8013CAE8(void); +extern s32 D_801EDAF8; +extern s32 D_801EDAFC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801EDAD8; +extern s32 D_801EDADC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801F163A; +extern u8 D_801F16AE; +extern u8 D_801F1562; +extern u8 D_801F161C; +extern u8 D_801F1540; +extern u8 D_801F1561; +extern s32 D_801F1620; +extern void func_8013D330(void); +extern void *D_801EDAB0; +extern void *D_801EDAB4; +extern void *D_801EDAB8; +extern s32 D_801EDAE0; +extern s32 D_801EDAE4; +extern s32 D_801EDAE8; +extern s32 D_801F1594[]; +extern u8 D_80190C6C[]; +extern u8 D_80190D14[]; +extern u8 D_80190BC4[]; +extern u8 D_80190CC0[]; +extern u8 D_80190D40[]; +extern u8 D_80190C18[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801EDABC; +extern s32 D_801EDAEC; +extern s32 D_801EDAF0; +extern s32 D_801EDAF4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801EDAD4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801917CC; +extern s32 D_80115188; +extern s16 D_801917A4; +extern s16 D_801917A6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801917A8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80191484; +extern u8 *D_80191488; +extern u8 *D_8019148C; +extern u8 *D_80191490; +extern u8 *D_80191494; +extern u16 *D_80191498[]; +extern u16 *D_801914A0[]; +extern u16 *D_801914C0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80191484; + iVar2 = func_80028D58(); + puVar3 = D_80191498[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80191488; + iVar2 = func_80028DE0(); + puVar3 = D_80191498[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8019148C + 0x18) = *D_801914A0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80191490 + 0x18) = *D_801914A0[iVar2]; + + puVar1 = D_80191494; + iVar2 = func_80028D9C(); + puVar3 = D_801914C0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801913C0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801913C0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801913D0; +extern char *D_801913F0; +extern char *D_801913F4; +extern char *D_801913F8; +extern char *D_801913FC; +extern char *D_80191400; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801913D0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801913F0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801913F4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801913F8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801913FC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80191400; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8019128A; +extern unsigned short D_8019128E; +extern unsigned short D_80191292; +extern unsigned short D_80191296; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8019128A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8019128E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80191292; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80191296; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80191820[])(void); + +void func_80141788(void) +{ + D_80191820[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8019182C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8019182C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801917A4; +extern s16 D_801917A6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80191444; + extern u8 D_8019145C; + extern u8 D_801914D0; + extern u8 D_801914D8; + extern void *D_801EDB08; + extern void *D_801EDB0C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801EDB08 = &D_80191444; + D_801EDB0C = &D_801914D0; + } else { + D_801EDB08 = &D_8019145C; + D_801EDB0C = &D_801914D8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801917A4 = 0xE; + D_801917A6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801917A8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801917A8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801917A8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80191780; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80191780 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80191850[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80191850[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80191860[])(void); + +void func_801425CC(void *a0) { + D_80191860[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80191844; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80191844); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191874[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191874[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191890[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191890[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191A60[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191A60[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80191B18[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80191B18[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801ED018; +extern u8 D_801EDB10; +extern u8 D_801EDB11; +extern u8 D_801EDB12; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801ED018; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801EDB10 = mul * (local.b[0] >> 4); + D_801EDB11 = mul * (local.b[1] >> 4); + D_801EDB12 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80191868; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80191868); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80191884[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80191884); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80191A50[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80191A50[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80191A70[]; +extern unsigned char D_80191AD0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80191A70); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80191AD0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801ED014; +extern u8 D_801EDB10; +extern u8 D_801EDB14; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801ED014, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801EDB10); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801EDB10, 0x10); + memcpy(&D_801EDB14, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80191C28[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80191C28[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80191D50[])(void); + +void func_80143B30(void *a0) { + D_80191D50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80191D5C[])(void); + +void func_80143C38(void *a0) { + D_80191D5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80191D64[])(void); + +void func_80143C98(void *a0) { + D_80191D64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80143D28); + + +extern void (*D_80191DAC[])(void); + +void func_80143E68(void *a0) { + D_80191DAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80191DC0[])(void); + +void func_80144054(void *a0) { + D_80191DC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80191DC8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80191DC8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80191D44; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80191D44, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80191D58; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80191D58 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80191D58 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80191D6C; +extern u8 D_80191D78; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80191D6C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80191D78); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80191D44; +extern u8 D_80191DB4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80191D44, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80191DB4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80191DD0[])(void); + +void func_801449C8(void *a0) { + D_80191DD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80191DD8[])(void); + +void func_80144A2C(void *a0) { + D_80191DD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c b/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c index 95edd54d3..4a63c3d76 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F658; -extern u8 *D_8017F65C; -extern u8 *D_8017F660; -extern u8 *D_8017F664; -extern u8 *D_8017F668; -extern u16 *D_8017F66C[]; -extern u16 *D_8017F674[]; -extern u16 *D_8017F694[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F658; - iVar2 = func_80028D58(); - puVar3 = D_8017F66C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F65C; - iVar2 = func_80028DE0(); - puVar3 = D_8017F66C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F660 + 0x18) = *D_8017F674[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F664 + 0x18) = *D_8017F674[iVar2]; - - puVar1 = D_8017F668; - iVar2 = func_80028D9C(); - puVar3 = D_8017F694[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F594; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F594); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F5A4; -extern char *D_8017F5C4; -extern char *D_8017F5C8; -extern char *D_8017F5CC; -extern char *D_8017F5D0; -extern char *D_8017F5D4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F5A4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F5C4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5C8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5CC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5D0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F5D4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F45E; -extern unsigned short D_8017F462; -extern unsigned short D_8017F466; -extern unsigned short D_8017F46A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F45E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F462; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F466; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F46A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F9F4[])(void); - -void func_80141788(void) -{ - D_8017F9F4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017FA00[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FA00[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F978; -extern s16 D_8017F97A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F618; - extern u8 D_8017F630; - extern u8 D_8017F6A4; - extern u8 D_8017F6AC; - extern void *D_80190A78; - extern void *D_80190A7C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80190A78 = &D_8017F618; - D_80190A7C = &D_8017F6A4; - } else { - D_80190A78 = &D_8017F630; - D_80190A7C = &D_8017F6AC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F978 = 0xE; - D_8017F97A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F97C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F97C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F97C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F954; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F954 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FA24[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FA24[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017FA34[])(void); - -void func_801425CC(void *a0) { - D_8017FA34[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FA18; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FA18); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FA48[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FA48[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FA64[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FA64[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FC34[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FC34[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FCEC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FCEC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019015C; -extern u8 D_80190A80; -extern u8 D_80190A81; -extern u8 D_80190A82; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019015C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80190A80 = mul * (local.b[0] >> 4); - D_80190A81 = mul * (local.b[1] >> 4); - D_80190A82 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017FA3C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FA3C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FA58[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FA58); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017FC24[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017FC24[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FC44[]; -extern unsigned char D_8017FCA4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017FC44); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017FCA4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80190158; -extern u8 D_80190A80; -extern u8 D_80190A84; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80190158, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80190A80); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80190A80, 0x10); - memcpy(&D_80190A84, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017FDFC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017FDFC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017FF24[])(void); - -void func_80143B30(void *a0) { - D_8017FF24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017FF30[])(void); - -void func_80143C38(void *a0) { - D_8017FF30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017FF38[])(void); - -void func_80143C98(void *a0) { - D_8017FF38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017FF80[])(void); - -void func_80143E68(void *a0) { - D_8017FF80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017FF94[])(void); - -void func_80144054(void *a0) { - D_8017FF94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017FF9C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017FF9C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017FF18; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FF18, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017FF2C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FF2C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FF2C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017FF40; -extern u8 D_8017FF4C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FF40); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FF4C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017FF18; -extern u8 D_8017FF88; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FF18, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017FF88, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017FFA4[])(void); - -void func_801449C8(void *a0) { - D_8017FFA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017FFAC[])(void); - -void func_80144A2C(void *a0) { - D_8017FFAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_012/ov_SC04_012_jr_80140608.c b/src/ov_SC04_012/ov_SC04_012_jr_80140608.c new file mode 100644 index 000000000..213a6a32d --- /dev/null +++ b/src/ov_SC04_012/ov_SC04_012_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018F7CC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E898[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80190934; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801931D0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018F7CC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017E5D4)(); +extern s16 (*D_8017E5D8)(); +extern M2C_UNK (*D_8017E5E0)(); +extern s32 (*D_8017E5E4)(); +extern s32 D_80190930; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018F7D0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E92C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80181E10; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E944; +extern M2C_UNK D_8017E94C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E954; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E970[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E97C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E990[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E9E0[]; +extern s16 D_8017EA10[]; +extern s16 D_8017EA70[]; +extern s16 D_8017EA78[]; +extern s16 D_8017EA98[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017EAD0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017EB28[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017EB70[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017EB78[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017EB80[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017EB88[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017EB30; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017EB50; +extern void func_801321B0(int param_1); +extern int D_8017EB60; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801909A0; +extern s32 D_801909A4[]; +extern int D_801909A8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017EB94; +extern u8 D_8017EB90; +extern s16 *D_8017EB98; +extern u8 D_8017EB9C; +extern int D_801909A0; +extern u16 D_801909B0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017EB98; /* holds a pointer value (*(u16**)&D_8017EB98) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017EBAC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017EC00; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017EC04[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017EC48; +extern u8 D_8017EC8C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017ECD0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017ED48, D_8017ED4A, D_8017ED4C, D_8017ED4E, D_8017ED50, D_8017ED52; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80190A18; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80190A1C; +extern s8 D_80190A1D; +extern void func_8013C9C4(void * arg0); +extern s32 D_80190A3C; +extern s32 D_80190A30; +extern s32 D_80190A34; +extern s32 D_80190A40; +extern void func_8013CABC(void); +extern s32 D_80190A38; +extern void func_8013CAE8(void); +extern s32 D_80190A68; +extern s32 D_80190A6C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80190A48; +extern s32 D_80190A4C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801931CA; +extern u8 D_8019323E; +extern u8 D_801930F2; +extern u8 D_801931AC; +extern u8 D_801930D0; +extern u8 D_801930F1; +extern s32 D_801931B0; +extern void func_8013D330(void); +extern void *D_80190A20; +extern void *D_80190A24; +extern void *D_80190A28; +extern s32 D_80190A50; +extern s32 D_80190A54; +extern s32 D_80190A58; +extern s32 D_80193124[]; +extern u8 D_8017EE40[]; +extern u8 D_8017EEE8[]; +extern u8 D_8017ED98[]; +extern u8 D_8017EE94[]; +extern u8 D_8017EF14[]; +extern u8 D_8017EDEC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80190A2C; +extern s32 D_80190A5C; +extern s32 D_80190A60; +extern s32 D_80190A64; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80190A44; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F9A0; +extern s32 D_80115188; +extern s16 D_8017F978; +extern s16 D_8017F97A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F97C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F658; +extern u8 *D_8017F65C; +extern u8 *D_8017F660; +extern u8 *D_8017F664; +extern u8 *D_8017F668; +extern u16 *D_8017F66C[]; +extern u16 *D_8017F674[]; +extern u16 *D_8017F694[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F658; + iVar2 = func_80028D58(); + puVar3 = D_8017F66C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F65C; + iVar2 = func_80028DE0(); + puVar3 = D_8017F66C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F660 + 0x18) = *D_8017F674[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F664 + 0x18) = *D_8017F674[iVar2]; + + puVar1 = D_8017F668; + iVar2 = func_80028D9C(); + puVar3 = D_8017F694[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F594; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F594); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F5A4; +extern char *D_8017F5C4; +extern char *D_8017F5C8; +extern char *D_8017F5CC; +extern char *D_8017F5D0; +extern char *D_8017F5D4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F5A4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F5C4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5C8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5CC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5D0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F5D4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F45E; +extern unsigned short D_8017F462; +extern unsigned short D_8017F466; +extern unsigned short D_8017F46A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F45E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F462; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F466; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F46A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F9F4[])(void); + +void func_80141788(void) +{ + D_8017F9F4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017FA00[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FA00[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F978; +extern s16 D_8017F97A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F618; + extern u8 D_8017F630; + extern u8 D_8017F6A4; + extern u8 D_8017F6AC; + extern void *D_80190A78; + extern void *D_80190A7C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80190A78 = &D_8017F618; + D_80190A7C = &D_8017F6A4; + } else { + D_80190A78 = &D_8017F630; + D_80190A7C = &D_8017F6AC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F978 = 0xE; + D_8017F97A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F97C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F97C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F97C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F954; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F954 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FA24[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FA24[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017FA34[])(void); + +void func_801425CC(void *a0) { + D_8017FA34[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FA18; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FA18); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FA48[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FA48[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FA64[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FA64[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FC34[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FC34[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FCEC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FCEC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019015C; +extern u8 D_80190A80; +extern u8 D_80190A81; +extern u8 D_80190A82; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019015C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80190A80 = mul * (local.b[0] >> 4); + D_80190A81 = mul * (local.b[1] >> 4); + D_80190A82 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017FA3C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FA3C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FA58[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FA58); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017FC24[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017FC24[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FC44[]; +extern unsigned char D_8017FCA4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017FC44); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017FCA4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80190158; +extern u8 D_80190A80; +extern u8 D_80190A84; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80190158, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80190A80); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80190A80, 0x10); + memcpy(&D_80190A84, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017FDFC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017FDFC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017FF24[])(void); + +void func_80143B30(void *a0) { + D_8017FF24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017FF30[])(void); + +void func_80143C38(void *a0) { + D_8017FF30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017FF38[])(void); + +void func_80143C98(void *a0) { + D_8017FF38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80143D28); + + +extern void (*D_8017FF80[])(void); + +void func_80143E68(void *a0) { + D_8017FF80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017FF94[])(void); + +void func_80144054(void *a0) { + D_8017FF94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017FF9C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017FF9C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017FF18; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FF18, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017FF2C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FF2C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FF2C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017FF40; +extern u8 D_8017FF4C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FF40); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FF4C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017FF18; +extern u8 D_8017FF88; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FF18, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017FF88, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017FFA4[])(void); + +void func_801449C8(void *a0) { + D_8017FFA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017FFAC[])(void); + +void func_80144A2C(void *a0) { + D_8017FFAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8013FFD8.c b/src/ov_SC04_015/ov_SC04_015_jr_8013FFD8.c index 7bae125be..3d34431aa 100644 --- a/src/ov_SC04_015/ov_SC04_015_jr_8013FFD8.c +++ b/src/ov_SC04_015/ov_SC04_015_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185590; -extern u8 *D_80185594; -extern u8 *D_80185598; -extern u8 *D_8018559C; -extern u8 *D_801855A0; -extern u16 *D_801855A4[]; -extern u16 *D_801855AC[]; -extern u16 *D_801855CC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185590; - iVar2 = func_80028D58(); - puVar3 = D_801855A4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185594; - iVar2 = func_80028DE0(); - puVar3 = D_801855A4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185598 + 0x18) = *D_801855AC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018559C + 0x18) = *D_801855AC[iVar2]; - - puVar1 = D_801855A0; - iVar2 = func_80028D9C(); - puVar3 = D_801855CC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801854CC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801854CC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801854DC; -extern char *D_801854FC; -extern char *D_80185500; -extern char *D_80185504; -extern char *D_80185508; -extern char *D_8018550C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801854DC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801854FC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185500; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185504; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185508; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018550C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80185396; -extern unsigned short D_8018539A; -extern unsigned short D_8018539E; -extern unsigned short D_801853A2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80185396; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018539A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018539E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801853A2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018592C[])(void); - -void func_80141788(void) -{ - D_8018592C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80185938[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80185938[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801858B0; -extern s16 D_801858B2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185550; - extern u8 D_80185568; - extern u8 D_801855DC; - extern u8 D_801855E4; - extern void *D_801C7760; - extern void *D_801C7764; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C7760 = &D_80185550; - D_801C7764 = &D_801855DC; - } else { - D_801C7760 = &D_80185568; - D_801C7764 = &D_801855E4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801858B0 = 0xE; - D_801858B2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801858B4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801858B4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801858B4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018588C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018588C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018595C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018595C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018596C[])(void); - -void func_801425CC(void *a0) { - D_8018596C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80185950; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80185950); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185980[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185980[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018599C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018599C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185B6C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185B6C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80185C24[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80185C24[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C6DF4; -extern u8 D_801C7768; -extern u8 D_801C7769; -extern u8 D_801C776A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C6DF4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C7768 = mul * (local.b[0] >> 4); - D_801C7769 = mul * (local.b[1] >> 4); - D_801C776A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80185974; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185974); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185990[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185990); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80185B5C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80185B5C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80185B7C[]; -extern unsigned char D_80185BDC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185B7C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80185BDC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C6DF0; -extern u8 D_801C7768; -extern u8 D_801C776C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C6DF0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C7768); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C7768, 0x10); - memcpy(&D_801C776C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80185D34[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80185D34[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80185E5C[])(void); - -void func_80143B30(void *a0) { - D_80185E5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80185E68[])(void); - -void func_80143C38(void *a0) { - D_80185E68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80185E70[])(void); - -void func_80143C98(void *a0) { - D_80185E70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80143D28); - - -extern void (*D_80185EB8[])(void); - -void func_80143E68(void *a0) { - D_80185EB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80185ECC[])(void); - -void func_80144054(void *a0) { - D_80185ECC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80185ED4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80185ED4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80185E50; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80185E50, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80185E64; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185E64 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185E64 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80185E78; -extern u8 D_80185E84; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185E78); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185E84); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80185E50; -extern u8 D_80185EC0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80185E50, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80185EC0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80185EDC[])(void); - -void func_801449C8(void *a0) { - D_80185EDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80185EE4[])(void); - -void func_80144A2C(void *a0) { - D_80185EE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_015/ov_SC04_015_jr_80140608.c b/src/ov_SC04_015/ov_SC04_015_jr_80140608.c new file mode 100644 index 000000000..16ed9a789 --- /dev/null +++ b/src/ov_SC04_015/ov_SC04_015_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C6464; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801847D0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C761C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C9370; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C6464; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184504)(); +extern s16 (*D_80184508)(); +extern M2C_UNK (*D_80184510)(); +extern s32 (*D_80184514)(); +extern s32 D_801C7618; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C6468; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80184864; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80187D48; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018487C; +extern M2C_UNK D_80184884; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018488C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801848A8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801848B4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801848C8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80184918[]; +extern s16 D_80184948[]; +extern s16 D_801849A8[]; +extern s16 D_801849B0[]; +extern s16 D_801849D0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80184A08[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80184A60[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80184AA8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80184AB0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80184AB8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80184AC0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80184A68; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80184A88; +extern void func_801321B0(int param_1); +extern int D_80184A98; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C7688; +extern s32 D_801C768C[]; +extern int D_801C7690; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80184ACC; +extern u8 D_80184AC8; +extern s16 *D_80184AD0; +extern u8 D_80184AD4; +extern int D_801C7688; +extern u16 D_801C7698; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80184AD0; /* holds a pointer value (*(u16**)&D_80184AD0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80184AE4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80184B38; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80184B3C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80184B80; +extern u8 D_80184BC4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80184C08[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80184C80, D_80184C82, D_80184C84, D_80184C86, D_80184C88, D_80184C8A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C7700; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C7704; +extern s8 D_801C7705; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C7724; +extern s32 D_801C7718; +extern s32 D_801C771C; +extern s32 D_801C7728; +extern void func_8013CABC(void); +extern s32 D_801C7720; +extern void func_8013CAE8(void); +extern s32 D_801C7750; +extern s32 D_801C7754; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C7730; +extern s32 D_801C7734; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C936A; +extern u8 D_801C93DE; +extern u8 D_801C926A; +extern u8 D_801C9334; +extern u8 D_801C9240; +extern u8 D_801C9269; +extern s32 D_801C9338; +extern void func_8013D330(void); +extern void *D_801C7708; +extern void *D_801C770C; +extern void *D_801C7710; +extern s32 D_801C7738; +extern s32 D_801C773C; +extern s32 D_801C7740; +extern s32 D_801C92AC[]; +extern u8 D_80184D78[]; +extern u8 D_80184E20[]; +extern u8 D_80184CD0[]; +extern u8 D_80184DCC[]; +extern u8 D_80184E4C[]; +extern u8 D_80184D24[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C7714; +extern s32 D_801C7744; +extern s32 D_801C7748; +extern s32 D_801C774C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C772C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801858D8; +extern s32 D_80115188; +extern s16 D_801858B0; +extern s16 D_801858B2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801858B4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185590; +extern u8 *D_80185594; +extern u8 *D_80185598; +extern u8 *D_8018559C; +extern u8 *D_801855A0; +extern u16 *D_801855A4[]; +extern u16 *D_801855AC[]; +extern u16 *D_801855CC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185590; + iVar2 = func_80028D58(); + puVar3 = D_801855A4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185594; + iVar2 = func_80028DE0(); + puVar3 = D_801855A4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185598 + 0x18) = *D_801855AC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018559C + 0x18) = *D_801855AC[iVar2]; + + puVar1 = D_801855A0; + iVar2 = func_80028D9C(); + puVar3 = D_801855CC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801854CC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801854CC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801854DC; +extern char *D_801854FC; +extern char *D_80185500; +extern char *D_80185504; +extern char *D_80185508; +extern char *D_8018550C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801854DC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801854FC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185500; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185504; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185508; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018550C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80185396; +extern unsigned short D_8018539A; +extern unsigned short D_8018539E; +extern unsigned short D_801853A2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80185396; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018539A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018539E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801853A2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018592C[])(void); + +void func_80141788(void) +{ + D_8018592C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80185938[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80185938[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801858B0; +extern s16 D_801858B2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185550; + extern u8 D_80185568; + extern u8 D_801855DC; + extern u8 D_801855E4; + extern void *D_801C7760; + extern void *D_801C7764; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C7760 = &D_80185550; + D_801C7764 = &D_801855DC; + } else { + D_801C7760 = &D_80185568; + D_801C7764 = &D_801855E4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801858B0 = 0xE; + D_801858B2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801858B4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801858B4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801858B4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018588C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018588C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018595C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018595C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018596C[])(void); + +void func_801425CC(void *a0) { + D_8018596C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80185950; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80185950); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185980[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185980[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018599C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018599C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185B6C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185B6C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80185C24[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80185C24[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C6DF4; +extern u8 D_801C7768; +extern u8 D_801C7769; +extern u8 D_801C776A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C6DF4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C7768 = mul * (local.b[0] >> 4); + D_801C7769 = mul * (local.b[1] >> 4); + D_801C776A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80185974; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80185974); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185990[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80185990); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80185B5C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80185B5C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80185B7C[]; +extern unsigned char D_80185BDC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80185B7C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80185BDC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C6DF0; +extern u8 D_801C7768; +extern u8 D_801C776C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C6DF0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C7768); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C7768, 0x10); + memcpy(&D_801C776C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80185D34[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80185D34[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80185E5C[])(void); + +void func_80143B30(void *a0) { + D_80185E5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80185E68[])(void); + +void func_80143C38(void *a0) { + D_80185E68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80185E70[])(void); + +void func_80143C98(void *a0) { + D_80185E70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80143D28); + + +extern void (*D_80185EB8[])(void); + +void func_80143E68(void *a0) { + D_80185EB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80185ECC[])(void); + +void func_80144054(void *a0) { + D_80185ECC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80185ED4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80185ED4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185E50; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80185E50, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80185E64; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80185E64 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80185E64 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80185E78; +extern u8 D_80185E84; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80185E78); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80185E84); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80185E50; +extern u8 D_80185EC0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80185E50, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80185EC0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80185EDC[])(void); + +void func_801449C8(void *a0) { + D_80185EDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80185EE4[])(void); + +void func_80144A2C(void *a0) { + D_80185EE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c b/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c index 21973fff5..cd3ea93eb 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181054; -extern u8 *D_80181058; -extern u8 *D_8018105C; -extern u8 *D_80181060; -extern u8 *D_80181064; -extern u16 *D_80181068[]; -extern u16 *D_80181070[]; -extern u16 *D_80181090[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181054; - iVar2 = func_80028D58(); - puVar3 = D_80181068[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181058; - iVar2 = func_80028DE0(); - puVar3 = D_80181068[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018105C + 0x18) = *D_80181070[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80181060 + 0x18) = *D_80181070[iVar2]; - - puVar1 = D_80181064; - iVar2 = func_80028D9C(); - puVar3 = D_80181090[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180F90; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180F90); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180FA0; -extern char *D_80180FC0; -extern char *D_80180FC4; -extern char *D_80180FC8; -extern char *D_80180FCC; -extern char *D_80180FD0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180FA0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180FC0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180FC4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180FC8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180FCC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180FD0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80180E5A; -extern unsigned short D_80180E5E; -extern unsigned short D_80180E62; -extern unsigned short D_80180E66; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80180E5A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80180E5E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180E62; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180E66; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801813F0[])(void); - -void func_80141788(void) -{ - D_801813F0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801813FC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801813FC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80181374; -extern s16 D_80181376; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181014; - extern u8 D_8018102C; - extern u8 D_801810A0; - extern u8 D_801810A8; - extern void *D_801A5908; - extern void *D_801A590C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A5908 = &D_80181014; - D_801A590C = &D_801810A0; - } else { - D_801A5908 = &D_8018102C; - D_801A590C = &D_801810A8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80181374 = 0xE; - D_80181376 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80181378: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80181378; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80181378); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80181350; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80181350 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80181420[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80181420[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80181430[])(void); - -void func_801425CC(void *a0) { - D_80181430[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80181414; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80181414); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181444[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181444[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181460[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181460[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181630[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181630[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801816E8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801816E8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A4FAC; -extern u8 D_801A5910; -extern u8 D_801A5911; -extern u8 D_801A5912; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A4FAC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A5910 = mul * (local.b[0] >> 4); - D_801A5911 = mul * (local.b[1] >> 4); - D_801A5912 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80181438; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181438); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181454[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181454); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80181620[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80181620[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181640[]; -extern unsigned char D_801816A0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181640); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801816A0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A4FA8; -extern u8 D_801A5910; -extern u8 D_801A5914; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A4FA8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A5910); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A5910, 0x10); - memcpy(&D_801A5914, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801817F8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801817F8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80181920[])(void); - -void func_80143B30(void *a0) { - D_80181920[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018192C[])(void); - -void func_80143C38(void *a0) { - D_8018192C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80181934[])(void); - -void func_80143C98(void *a0) { - D_80181934[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018197C[])(void); - -void func_80143E68(void *a0) { - D_8018197C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80181990[])(void); - -void func_80144054(void *a0) { - D_80181990[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80181998[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80181998[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80181914; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80181914, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80181928; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181928 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181928 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018193C; -extern u8 D_80181948; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018193C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181948); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80181914; -extern u8 D_80181984; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80181914, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80181984, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801819A0[])(void); - -void func_801449C8(void *a0) { - D_801819A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801819A8[])(void); - -void func_80144A2C(void *a0) { - D_801819A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_016/ov_SC04_016_jr_80140608.c b/src/ov_SC04_016/ov_SC04_016_jr_80140608.c new file mode 100644 index 000000000..95fdab673 --- /dev/null +++ b/src/ov_SC04_016/ov_SC04_016_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A461C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80180294[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A57C4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AC270; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A461C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017FFD0)(); +extern s16 (*D_8017FFD4)(); +extern M2C_UNK (*D_8017FFDC)(); +extern s32 (*D_8017FFE0)(); +extern s32 D_801A57C0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A4620; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80180328; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018380C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80180340; +extern M2C_UNK D_80180348; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80180350; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018036C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80180378[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018038C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801803DC[]; +extern s16 D_8018040C[]; +extern s16 D_8018046C[]; +extern s16 D_80180474[]; +extern s16 D_80180494[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801804CC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80180524[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018056C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80180574[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018057C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80180584[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018052C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018054C; +extern void func_801321B0(int param_1); +extern int D_8018055C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A5830; +extern s32 D_801A5834[]; +extern int D_801A5838; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80180590; +extern u8 D_8018058C; +extern s16 *D_80180594; +extern u8 D_80180598; +extern int D_801A5830; +extern u16 D_801A5840; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80180594; /* holds a pointer value (*(u16**)&D_80180594) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801805A8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801805FC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80180600[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80180644; +extern u8 D_80180688; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801806CC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80180744, D_80180746, D_80180748, D_8018074A, D_8018074C, D_8018074E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A58A8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A58AC; +extern s8 D_801A58AD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A58CC; +extern s32 D_801A58C0; +extern s32 D_801A58C4; +extern s32 D_801A58D0; +extern void func_8013CABC(void); +extern s32 D_801A58C8; +extern void func_8013CAE8(void); +extern s32 D_801A58F8; +extern s32 D_801A58FC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A58D8; +extern s32 D_801A58DC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AC26A; +extern u8 D_801AC2DE; +extern u8 D_801AC192; +extern u8 D_801AC24C; +extern u8 D_801AC170; +extern u8 D_801AC191; +extern s32 D_801AC250; +extern void func_8013D330(void); +extern void *D_801A58B0; +extern void *D_801A58B4; +extern void *D_801A58B8; +extern s32 D_801A58E0; +extern s32 D_801A58E4; +extern s32 D_801A58E8; +extern s32 D_801AC1C4[]; +extern u8 D_8018083C[]; +extern u8 D_801808E4[]; +extern u8 D_80180794[]; +extern u8 D_80180890[]; +extern u8 D_80180910[]; +extern u8 D_801807E8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A58BC; +extern s32 D_801A58EC; +extern s32 D_801A58F0; +extern s32 D_801A58F4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A58D4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018139C; +extern s32 D_80115188; +extern s16 D_80181374; +extern s16 D_80181376; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80181378; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181054; +extern u8 *D_80181058; +extern u8 *D_8018105C; +extern u8 *D_80181060; +extern u8 *D_80181064; +extern u16 *D_80181068[]; +extern u16 *D_80181070[]; +extern u16 *D_80181090[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181054; + iVar2 = func_80028D58(); + puVar3 = D_80181068[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181058; + iVar2 = func_80028DE0(); + puVar3 = D_80181068[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018105C + 0x18) = *D_80181070[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80181060 + 0x18) = *D_80181070[iVar2]; + + puVar1 = D_80181064; + iVar2 = func_80028D9C(); + puVar3 = D_80181090[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180F90; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180F90); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180FA0; +extern char *D_80180FC0; +extern char *D_80180FC4; +extern char *D_80180FC8; +extern char *D_80180FCC; +extern char *D_80180FD0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180FA0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180FC0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180FC4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180FC8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180FCC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180FD0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80180E5A; +extern unsigned short D_80180E5E; +extern unsigned short D_80180E62; +extern unsigned short D_80180E66; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80180E5A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80180E5E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180E62; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180E66; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801813F0[])(void); + +void func_80141788(void) +{ + D_801813F0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801813FC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801813FC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80181374; +extern s16 D_80181376; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181014; + extern u8 D_8018102C; + extern u8 D_801810A0; + extern u8 D_801810A8; + extern void *D_801A5908; + extern void *D_801A590C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A5908 = &D_80181014; + D_801A590C = &D_801810A0; + } else { + D_801A5908 = &D_8018102C; + D_801A590C = &D_801810A8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80181374 = 0xE; + D_80181376 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80181378: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80181378; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80181378); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80181350; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80181350 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80181420[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80181420[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80181430[])(void); + +void func_801425CC(void *a0) { + D_80181430[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80181414; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80181414); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181444[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181444[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181460[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181460[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181630[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181630[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801816E8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801816E8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A4FAC; +extern u8 D_801A5910; +extern u8 D_801A5911; +extern u8 D_801A5912; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A4FAC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A5910 = mul * (local.b[0] >> 4); + D_801A5911 = mul * (local.b[1] >> 4); + D_801A5912 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80181438; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181438); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181454[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181454); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80181620[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80181620[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181640[]; +extern unsigned char D_801816A0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181640); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801816A0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A4FA8; +extern u8 D_801A5910; +extern u8 D_801A5914; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A4FA8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A5910); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A5910, 0x10); + memcpy(&D_801A5914, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801817F8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801817F8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80181920[])(void); + +void func_80143B30(void *a0) { + D_80181920[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018192C[])(void); + +void func_80143C38(void *a0) { + D_8018192C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80181934[])(void); + +void func_80143C98(void *a0) { + D_80181934[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80143D28); + + +extern void (*D_8018197C[])(void); + +void func_80143E68(void *a0) { + D_8018197C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80181990[])(void); + +void func_80144054(void *a0) { + D_80181990[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80181998[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80181998[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181914; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80181914, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80181928; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181928 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181928 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018193C; +extern u8 D_80181948; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018193C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181948); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80181914; +extern u8 D_80181984; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80181914, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80181984, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801819A0[])(void); + +void func_801449C8(void *a0) { + D_801819A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801819A8[])(void); + +void func_80144A2C(void *a0) { + D_801819A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c b/src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c index 61b723d12..c0287bcf7 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018E26C; -extern u8 *D_8018E270; -extern u8 *D_8018E274; -extern u8 *D_8018E278; -extern u8 *D_8018E27C; -extern u16 *D_8018E280[]; -extern u16 *D_8018E288[]; -extern u16 *D_8018E2A8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018E26C; - iVar2 = func_80028D58(); - puVar3 = D_8018E280[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018E270; - iVar2 = func_80028DE0(); - puVar3 = D_8018E280[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018E274 + 0x18) = *D_8018E288[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018E278 + 0x18) = *D_8018E288[iVar2]; - - puVar1 = D_8018E27C; - iVar2 = func_80028D9C(); - puVar3 = D_8018E2A8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018E1A8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018E1A8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018E1B8; -extern char *D_8018E1D8; -extern char *D_8018E1DC; -extern char *D_8018E1E0; -extern char *D_8018E1E4; -extern char *D_8018E1E8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018E1B8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018E1D8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1DC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1E0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1E4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1E8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018E072; -extern unsigned short D_8018E076; -extern unsigned short D_8018E07A; -extern unsigned short D_8018E07E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018E072; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E076; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E07A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E07E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018E608[])(void); - -void func_80141788(void) -{ - D_8018E608[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018E614[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018E614[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018E58C; -extern s16 D_8018E58E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018E22C; - extern u8 D_8018E244; - extern u8 D_8018E2B8; - extern u8 D_8018E2C0; - extern void *D_801E5B58; - extern void *D_801E5B5C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E5B58 = &D_8018E22C; - D_801E5B5C = &D_8018E2B8; - } else { - D_801E5B58 = &D_8018E244; - D_801E5B5C = &D_8018E2C0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018E58C = 0xE; - D_8018E58E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018E590: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018E590; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018E590); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018E568; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018E568 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018E638[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018E638[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018E648[])(void); - -void func_801425CC(void *a0) { - D_8018E648[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018E62C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018E62C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E65C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E65C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E678[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E678[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E848[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E848[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E900[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E900[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E4DC4; -extern u8 D_801E5B60; -extern u8 D_801E5B61; -extern u8 D_801E5B62; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E4DC4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E5B60 = mul * (local.b[0] >> 4); - D_801E5B61 = mul * (local.b[1] >> 4); - D_801E5B62 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018E650; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E650); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E66C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E66C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018E838[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018E838[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E858[]; -extern unsigned char D_8018E8B8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E858); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018E8B8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E4DC0; -extern u8 D_801E5B60; -extern u8 D_801E5B64; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E4DC0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E5B60); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E5B60, 0x10); - memcpy(&D_801E5B64, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018EA10[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018EA10[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018EB38[])(void); - -void func_80143B30(void *a0) { - D_8018EB38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018EB44[])(void); - -void func_80143C38(void *a0) { - D_8018EB44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018EB4C[])(void); - -void func_80143C98(void *a0) { - D_8018EB4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018EB94[])(void); - -void func_80143E68(void *a0) { - D_8018EB94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018EBA8[])(void); - -void func_80144054(void *a0) { - D_8018EBA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018EBB0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018EBB0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018EB2C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018EB2C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018EB40; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EB40 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EB40 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018EB54; -extern u8 D_8018EB60; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EB54); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EB60); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018EB2C; -extern u8 D_8018EB9C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018EB2C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018EB9C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018EBB8[])(void); - -void func_801449C8(void *a0) { - D_8018EBB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018EBC0[])(void); - -void func_80144A2C(void *a0) { - D_8018EBC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_018/ov_SC04_018_jr_80140608.c b/src/ov_SC04_018/ov_SC04_018_jr_80140608.c new file mode 100644 index 000000000..e93ddcc8f --- /dev/null +++ b/src/ov_SC04_018/ov_SC04_018_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E4434; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018D4AC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E5A14; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E7AB8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E4434; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018D1E0)(); +extern s16 (*D_8018D1E4)(); +extern M2C_UNK (*D_8018D1EC)(); +extern s32 (*D_8018D1F0)(); +extern s32 D_801E5A10; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E4438; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018D540; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80190A24; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018D558; +extern M2C_UNK D_8018D560; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018D568; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018D584[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018D590[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018D5A4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018D5F4[]; +extern s16 D_8018D624[]; +extern s16 D_8018D684[]; +extern s16 D_8018D68C[]; +extern s16 D_8018D6AC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018D6E4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018D73C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018D784[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018D78C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018D794[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018D79C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018D744; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018D764; +extern void func_801321B0(int param_1); +extern int D_8018D774; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E5A80; +extern s32 D_801E5A84[]; +extern int D_801E5A88; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018D7A8; +extern u8 D_8018D7A4; +extern s16 *D_8018D7AC; +extern u8 D_8018D7B0; +extern int D_801E5A80; +extern u16 D_801E5A90; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018D7AC; /* holds a pointer value (*(u16**)&D_8018D7AC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018D7C0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018D814; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018D818[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018D85C; +extern u8 D_8018D8A0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018D8E4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018D95C, D_8018D95E, D_8018D960, D_8018D962, D_8018D964, D_8018D966; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E5AF8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E5AFC; +extern s8 D_801E5AFD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E5B1C; +extern s32 D_801E5B10; +extern s32 D_801E5B14; +extern s32 D_801E5B20; +extern void func_8013CABC(void); +extern s32 D_801E5B18; +extern void func_8013CAE8(void); +extern s32 D_801E5B48; +extern s32 D_801E5B4C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E5B28; +extern s32 D_801E5B2C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E7AB2; +extern u8 D_801E7B26; +extern u8 D_801E79B2; +extern u8 D_801E7A7C; +extern u8 D_801E7988; +extern u8 D_801E79B1; +extern s32 D_801E7A80; +extern void func_8013D330(void); +extern void *D_801E5B00; +extern void *D_801E5B04; +extern void *D_801E5B08; +extern s32 D_801E5B30; +extern s32 D_801E5B34; +extern s32 D_801E5B38; +extern s32 D_801E79F4[]; +extern u8 D_8018DA54[]; +extern u8 D_8018DAFC[]; +extern u8 D_8018D9AC[]; +extern u8 D_8018DAA8[]; +extern u8 D_8018DB28[]; +extern u8 D_8018DA00[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E5B0C; +extern s32 D_801E5B3C; +extern s32 D_801E5B40; +extern s32 D_801E5B44; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E5B24; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018E5B4; +extern s32 D_80115188; +extern s16 D_8018E58C; +extern s16 D_8018E58E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018E590; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018E26C; +extern u8 *D_8018E270; +extern u8 *D_8018E274; +extern u8 *D_8018E278; +extern u8 *D_8018E27C; +extern u16 *D_8018E280[]; +extern u16 *D_8018E288[]; +extern u16 *D_8018E2A8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018E26C; + iVar2 = func_80028D58(); + puVar3 = D_8018E280[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018E270; + iVar2 = func_80028DE0(); + puVar3 = D_8018E280[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018E274 + 0x18) = *D_8018E288[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018E278 + 0x18) = *D_8018E288[iVar2]; + + puVar1 = D_8018E27C; + iVar2 = func_80028D9C(); + puVar3 = D_8018E2A8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018E1A8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018E1A8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018E1B8; +extern char *D_8018E1D8; +extern char *D_8018E1DC; +extern char *D_8018E1E0; +extern char *D_8018E1E4; +extern char *D_8018E1E8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018E1B8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018E1D8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1DC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1E0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1E4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1E8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018E072; +extern unsigned short D_8018E076; +extern unsigned short D_8018E07A; +extern unsigned short D_8018E07E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018E072; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E076; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E07A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E07E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018E608[])(void); + +void func_80141788(void) +{ + D_8018E608[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018E614[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018E614[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018E58C; +extern s16 D_8018E58E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018E22C; + extern u8 D_8018E244; + extern u8 D_8018E2B8; + extern u8 D_8018E2C0; + extern void *D_801E5B58; + extern void *D_801E5B5C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E5B58 = &D_8018E22C; + D_801E5B5C = &D_8018E2B8; + } else { + D_801E5B58 = &D_8018E244; + D_801E5B5C = &D_8018E2C0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018E58C = 0xE; + D_8018E58E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018E590: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018E590; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018E590); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018E568; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018E568 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018E638[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018E638[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018E648[])(void); + +void func_801425CC(void *a0) { + D_8018E648[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018E62C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018E62C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E65C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E65C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E678[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E678[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E848[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E848[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E900[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E900[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E4DC4; +extern u8 D_801E5B60; +extern u8 D_801E5B61; +extern u8 D_801E5B62; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E4DC4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E5B60 = mul * (local.b[0] >> 4); + D_801E5B61 = mul * (local.b[1] >> 4); + D_801E5B62 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018E650; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E650); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E66C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E66C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018E838[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018E838[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E858[]; +extern unsigned char D_8018E8B8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E858); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018E8B8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E4DC0; +extern u8 D_801E5B60; +extern u8 D_801E5B64; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E4DC0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E5B60); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E5B60, 0x10); + memcpy(&D_801E5B64, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018EA10[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018EA10[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018EB38[])(void); + +void func_80143B30(void *a0) { + D_8018EB38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018EB44[])(void); + +void func_80143C38(void *a0) { + D_8018EB44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018EB4C[])(void); + +void func_80143C98(void *a0) { + D_8018EB4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80143D28); + + +extern void (*D_8018EB94[])(void); + +void func_80143E68(void *a0) { + D_8018EB94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018EBA8[])(void); + +void func_80144054(void *a0) { + D_8018EBA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018EBB0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018EBB0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EB2C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018EB2C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018EB40; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EB40 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EB40 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018EB54; +extern u8 D_8018EB60; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EB54); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EB60); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018EB2C; +extern u8 D_8018EB9C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018EB2C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018EB9C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018EBB8[])(void); + +void func_801449C8(void *a0) { + D_8018EBB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018EBC0[])(void); + +void func_80144A2C(void *a0) { + D_8018EBC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8013FFD8.c b/src/ov_SC04_019/ov_SC04_019_jr_8013FFD8.c index 7592fe58f..d70e84403 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_8013FFD8.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018E26C; -extern u8 *D_8018E270; -extern u8 *D_8018E274; -extern u8 *D_8018E278; -extern u8 *D_8018E27C; -extern u16 *D_8018E280[]; -extern u16 *D_8018E288[]; -extern u16 *D_8018E2A8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018E26C; - iVar2 = func_80028D58(); - puVar3 = D_8018E280[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018E270; - iVar2 = func_80028DE0(); - puVar3 = D_8018E280[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018E274 + 0x18) = *D_8018E288[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018E278 + 0x18) = *D_8018E288[iVar2]; - - puVar1 = D_8018E27C; - iVar2 = func_80028D9C(); - puVar3 = D_8018E2A8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018E1A8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018E1A8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018E1B8; -extern char *D_8018E1D8; -extern char *D_8018E1DC; -extern char *D_8018E1E0; -extern char *D_8018E1E4; -extern char *D_8018E1E8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018E1B8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018E1D8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1DC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1E0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1E4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1E8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018E072; -extern unsigned short D_8018E076; -extern unsigned short D_8018E07A; -extern unsigned short D_8018E07E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018E072; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E076; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E07A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E07E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018E608[])(void); - -void func_80141788(void) -{ - D_8018E608[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018E614[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018E614[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018E58C; -extern s16 D_8018E58E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018E22C; - extern u8 D_8018E244; - extern u8 D_8018E2B8; - extern u8 D_8018E2C0; - extern void *D_801E5B58; - extern void *D_801E5B5C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E5B58 = &D_8018E22C; - D_801E5B5C = &D_8018E2B8; - } else { - D_801E5B58 = &D_8018E244; - D_801E5B5C = &D_8018E2C0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018E58C = 0xE; - D_8018E58E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018E590: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018E590; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018E590); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018E568; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018E568 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018E638[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018E638[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018E648[])(void); - -void func_801425CC(void *a0) { - D_8018E648[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018E62C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018E62C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E65C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E65C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E678[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E678[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E848[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E848[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E900[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E900[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E4DC4; -extern u8 D_801E5B60; -extern u8 D_801E5B61; -extern u8 D_801E5B62; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E4DC4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E5B60 = mul * (local.b[0] >> 4); - D_801E5B61 = mul * (local.b[1] >> 4); - D_801E5B62 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018E650; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E650); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E66C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E66C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018E838[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018E838[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E858[]; -extern unsigned char D_8018E8B8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E858); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018E8B8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E4DC0; -extern u8 D_801E5B60; -extern u8 D_801E5B64; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E4DC0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E5B60); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E5B60, 0x10); - memcpy(&D_801E5B64, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018EA10[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018EA10[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018EB38[])(void); - -void func_80143B30(void *a0) { - D_8018EB38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018EB44[])(void); - -void func_80143C38(void *a0) { - D_8018EB44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018EB4C[])(void); - -void func_80143C98(void *a0) { - D_8018EB4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018EB94[])(void); - -void func_80143E68(void *a0) { - D_8018EB94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018EBA8[])(void); - -void func_80144054(void *a0) { - D_8018EBA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018EBB0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018EBB0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018EB2C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018EB2C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018EB40; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EB40 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EB40 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018EB54; -extern u8 D_8018EB60; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EB54); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EB60); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018EB2C; -extern u8 D_8018EB9C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018EB2C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018EB9C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018EBB8[])(void); - -void func_801449C8(void *a0) { - D_8018EBB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018EBC0[])(void); - -void func_80144A2C(void *a0) { - D_8018EBC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_019/ov_SC04_019_jr_80140608.c b/src/ov_SC04_019/ov_SC04_019_jr_80140608.c new file mode 100644 index 000000000..1ce1e36be --- /dev/null +++ b/src/ov_SC04_019/ov_SC04_019_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E4434; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018D4AC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E5A14; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E7AB8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E4434; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018D1E0)(); +extern s16 (*D_8018D1E4)(); +extern M2C_UNK (*D_8018D1EC)(); +extern s32 (*D_8018D1F0)(); +extern s32 D_801E5A10; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E4438; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018D540; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80190A24; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018D558; +extern M2C_UNK D_8018D560; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018D568; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018D584[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018D590[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018D5A4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018D5F4[]; +extern s16 D_8018D624[]; +extern s16 D_8018D684[]; +extern s16 D_8018D68C[]; +extern s16 D_8018D6AC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018D6E4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018D73C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018D784[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018D78C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018D794[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018D79C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018D744; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018D764; +extern void func_801321B0(int param_1); +extern int D_8018D774; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E5A80; +extern s32 D_801E5A84[]; +extern int D_801E5A88; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018D7A8; +extern u8 D_8018D7A4; +extern s16 *D_8018D7AC; +extern u8 D_8018D7B0; +extern int D_801E5A80; +extern u16 D_801E5A90; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018D7AC; /* holds a pointer value (*(u16**)&D_8018D7AC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018D7C0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018D814; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018D818[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018D85C; +extern u8 D_8018D8A0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018D8E4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018D95C, D_8018D95E, D_8018D960, D_8018D962, D_8018D964, D_8018D966; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E5AF8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E5AFC; +extern s8 D_801E5AFD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E5B1C; +extern s32 D_801E5B10; +extern s32 D_801E5B14; +extern s32 D_801E5B20; +extern void func_8013CABC(void); +extern s32 D_801E5B18; +extern void func_8013CAE8(void); +extern s32 D_801E5B48; +extern s32 D_801E5B4C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E5B28; +extern s32 D_801E5B2C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E7AB2; +extern u8 D_801E7B26; +extern u8 D_801E79B2; +extern u8 D_801E7A7C; +extern u8 D_801E7988; +extern u8 D_801E79B1; +extern s32 D_801E7A80; +extern void func_8013D330(void); +extern void *D_801E5B00; +extern void *D_801E5B04; +extern void *D_801E5B08; +extern s32 D_801E5B30; +extern s32 D_801E5B34; +extern s32 D_801E5B38; +extern s32 D_801E79F4[]; +extern u8 D_8018DA54[]; +extern u8 D_8018DAFC[]; +extern u8 D_8018D9AC[]; +extern u8 D_8018DAA8[]; +extern u8 D_8018DB28[]; +extern u8 D_8018DA00[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E5B0C; +extern s32 D_801E5B3C; +extern s32 D_801E5B40; +extern s32 D_801E5B44; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E5B24; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018E5B4; +extern s32 D_80115188; +extern s16 D_8018E58C; +extern s16 D_8018E58E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018E590; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018E26C; +extern u8 *D_8018E270; +extern u8 *D_8018E274; +extern u8 *D_8018E278; +extern u8 *D_8018E27C; +extern u16 *D_8018E280[]; +extern u16 *D_8018E288[]; +extern u16 *D_8018E2A8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018E26C; + iVar2 = func_80028D58(); + puVar3 = D_8018E280[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018E270; + iVar2 = func_80028DE0(); + puVar3 = D_8018E280[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018E274 + 0x18) = *D_8018E288[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018E278 + 0x18) = *D_8018E288[iVar2]; + + puVar1 = D_8018E27C; + iVar2 = func_80028D9C(); + puVar3 = D_8018E2A8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018E1A8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018E1A8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018E1B8; +extern char *D_8018E1D8; +extern char *D_8018E1DC; +extern char *D_8018E1E0; +extern char *D_8018E1E4; +extern char *D_8018E1E8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018E1B8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018E1D8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1DC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1E0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1E4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1E8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018E072; +extern unsigned short D_8018E076; +extern unsigned short D_8018E07A; +extern unsigned short D_8018E07E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018E072; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E076; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E07A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E07E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018E608[])(void); + +void func_80141788(void) +{ + D_8018E608[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018E614[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018E614[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018E58C; +extern s16 D_8018E58E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018E22C; + extern u8 D_8018E244; + extern u8 D_8018E2B8; + extern u8 D_8018E2C0; + extern void *D_801E5B58; + extern void *D_801E5B5C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E5B58 = &D_8018E22C; + D_801E5B5C = &D_8018E2B8; + } else { + D_801E5B58 = &D_8018E244; + D_801E5B5C = &D_8018E2C0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018E58C = 0xE; + D_8018E58E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018E590: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018E590; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018E590); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018E568; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018E568 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018E638[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018E638[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018E648[])(void); + +void func_801425CC(void *a0) { + D_8018E648[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018E62C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018E62C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E65C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E65C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E678[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E678[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E848[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E848[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E900[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E900[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E4DC4; +extern u8 D_801E5B60; +extern u8 D_801E5B61; +extern u8 D_801E5B62; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E4DC4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E5B60 = mul * (local.b[0] >> 4); + D_801E5B61 = mul * (local.b[1] >> 4); + D_801E5B62 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018E650; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E650); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E66C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E66C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018E838[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018E838[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E858[]; +extern unsigned char D_8018E8B8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E858); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018E8B8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E4DC0; +extern u8 D_801E5B60; +extern u8 D_801E5B64; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E4DC0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E5B60); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E5B60, 0x10); + memcpy(&D_801E5B64, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018EA10[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018EA10[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018EB38[])(void); + +void func_80143B30(void *a0) { + D_8018EB38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018EB44[])(void); + +void func_80143C38(void *a0) { + D_8018EB44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018EB4C[])(void); + +void func_80143C98(void *a0) { + D_8018EB4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80143D28); + + +extern void (*D_8018EB94[])(void); + +void func_80143E68(void *a0) { + D_8018EB94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018EBA8[])(void); + +void func_80144054(void *a0) { + D_8018EBA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018EBB0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018EBB0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EB2C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018EB2C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018EB40; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EB40 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EB40 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018EB54; +extern u8 D_8018EB60; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EB54); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EB60); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018EB2C; +extern u8 D_8018EB9C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018EB2C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018EB9C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018EBB8[])(void); + +void func_801449C8(void *a0) { + D_8018EBB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018EBC0[])(void); + +void func_80144A2C(void *a0) { + D_8018EBC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8013FFD8.c b/src/ov_SC04_020/ov_SC04_020_jr_8013FFD8.c index dd5c823a5..ab94819bb 100644 --- a/src/ov_SC04_020/ov_SC04_020_jr_8013FFD8.c +++ b/src/ov_SC04_020/ov_SC04_020_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801843A4; -extern u8 *D_801843A8; -extern u8 *D_801843AC; -extern u8 *D_801843B0; -extern u8 *D_801843B4; -extern u16 *D_801843B8[]; -extern u16 *D_801843C0[]; -extern u16 *D_801843E0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801843A4; - iVar2 = func_80028D58(); - puVar3 = D_801843B8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801843A8; - iVar2 = func_80028DE0(); - puVar3 = D_801843B8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801843AC + 0x18) = *D_801843C0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801843B0 + 0x18) = *D_801843C0[iVar2]; - - puVar1 = D_801843B4; - iVar2 = func_80028D9C(); - puVar3 = D_801843E0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801842E0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801842E0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801842F0; -extern char *D_80184310; -extern char *D_80184314; -extern char *D_80184318; -extern char *D_8018431C; -extern char *D_80184320; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801842F0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80184310; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184314; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184318; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018431C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80184320; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801841AA; -extern unsigned short D_801841AE; -extern unsigned short D_801841B2; -extern unsigned short D_801841B6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801841AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801841AE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801841B2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801841B6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80184740[])(void); - -void func_80141788(void) -{ - D_80184740[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018474C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018474C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801846C4; -extern s16 D_801846C6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80184364; - extern u8 D_8018437C; - extern u8 D_801843F0; - extern u8 D_801843F8; - extern void *D_801BB168; - extern void *D_801BB16C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801BB168 = &D_80184364; - D_801BB16C = &D_801843F0; - } else { - D_801BB168 = &D_8018437C; - D_801BB16C = &D_801843F8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801846C4 = 0xE; - D_801846C6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801846C8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801846C8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801846C8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801846A0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801846A0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80184770[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80184770[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80184780[])(void); - -void func_801425CC(void *a0) { - D_80184780[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80184764; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80184764); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184794[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184794[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801847B0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801847B0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184980[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184980[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80184A38[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80184A38[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801BA7EC; -extern u8 D_801BB170; -extern u8 D_801BB171; -extern u8 D_801BB172; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801BA7EC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801BB170 = mul * (local.b[0] >> 4); - D_801BB171 = mul * (local.b[1] >> 4); - D_801BB172 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80184788; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184788); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801847A4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801847A4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80184970[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80184970[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80184990[]; -extern unsigned char D_801849F0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184990); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801849F0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801BA7E8; -extern u8 D_801BB170; -extern u8 D_801BB174; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801BA7E8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801BB170); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801BB170, 0x10); - memcpy(&D_801BB174, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80184B48[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80184B48[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80184C70[])(void); - -void func_80143B30(void *a0) { - D_80184C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80184C7C[])(void); - -void func_80143C38(void *a0) { - D_80184C7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80184C84[])(void); - -void func_80143C98(void *a0) { - D_80184C84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80143D28); - - -extern void (*D_80184CCC[])(void); - -void func_80143E68(void *a0) { - D_80184CCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80184CE0[])(void); - -void func_80144054(void *a0) { - D_80184CE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184CE8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184CE8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80184C64; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80184C64, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80184C78; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184C78 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184C78 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80184C8C; -extern u8 D_80184C98; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184C8C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184C98); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80184C64; -extern u8 D_80184CD4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80184C64, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184CD4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80184CF0[])(void); - -void func_801449C8(void *a0) { - D_80184CF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184CF8[])(void); - -void func_80144A2C(void *a0) { - D_80184CF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_020/ov_SC04_020_jr_80140608.c b/src/ov_SC04_020/ov_SC04_020_jr_80140608.c new file mode 100644 index 000000000..1977e09bd --- /dev/null +++ b/src/ov_SC04_020/ov_SC04_020_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B9E5C; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801835E4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801BB024; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801BC740; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B9E5C; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80183320)(); +extern s16 (*D_80183324)(); +extern M2C_UNK (*D_8018332C)(); +extern s32 (*D_80183330)(); +extern s32 D_801BB020; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B9E60; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80183678; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80186B5C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80183690; +extern M2C_UNK D_80183698; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801836A0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801836BC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801836C8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801836DC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018372C[]; +extern s16 D_8018375C[]; +extern s16 D_801837BC[]; +extern s16 D_801837C4[]; +extern s16 D_801837E4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018381C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80183874[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801838BC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801838C4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801838CC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801838D4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018387C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018389C; +extern void func_801321B0(int param_1); +extern int D_801838AC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801BB090; +extern s32 D_801BB094[]; +extern int D_801BB098; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801838E0; +extern u8 D_801838DC; +extern s16 *D_801838E4; +extern u8 D_801838E8; +extern int D_801BB090; +extern u16 D_801BB0A0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801838E4; /* holds a pointer value (*(u16**)&D_801838E4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801838F8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018394C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80183950[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80183994; +extern u8 D_801839D8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183A1C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80183A94, D_80183A96, D_80183A98, D_80183A9A, D_80183A9C, D_80183A9E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801BB108; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801BB10C; +extern s8 D_801BB10D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801BB12C; +extern s32 D_801BB120; +extern s32 D_801BB124; +extern s32 D_801BB130; +extern void func_8013CABC(void); +extern s32 D_801BB128; +extern void func_8013CAE8(void); +extern s32 D_801BB158; +extern s32 D_801BB15C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801BB138; +extern s32 D_801BB13C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801BC73A; +extern u8 D_801BC7AE; +extern u8 D_801BC63A; +extern u8 D_801BC704; +extern u8 D_801BC610; +extern u8 D_801BC639; +extern s32 D_801BC708; +extern void func_8013D330(void); +extern void *D_801BB110; +extern void *D_801BB114; +extern void *D_801BB118; +extern s32 D_801BB140; +extern s32 D_801BB144; +extern s32 D_801BB148; +extern s32 D_801BC67C[]; +extern u8 D_80183B8C[]; +extern u8 D_80183C34[]; +extern u8 D_80183AE4[]; +extern u8 D_80183BE0[]; +extern u8 D_80183C60[]; +extern u8 D_80183B38[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801BB11C; +extern s32 D_801BB14C; +extern s32 D_801BB150; +extern s32 D_801BB154; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801BB134; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801846EC; +extern s32 D_80115188; +extern s16 D_801846C4; +extern s16 D_801846C6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801846C8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801843A4; +extern u8 *D_801843A8; +extern u8 *D_801843AC; +extern u8 *D_801843B0; +extern u8 *D_801843B4; +extern u16 *D_801843B8[]; +extern u16 *D_801843C0[]; +extern u16 *D_801843E0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801843A4; + iVar2 = func_80028D58(); + puVar3 = D_801843B8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801843A8; + iVar2 = func_80028DE0(); + puVar3 = D_801843B8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801843AC + 0x18) = *D_801843C0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801843B0 + 0x18) = *D_801843C0[iVar2]; + + puVar1 = D_801843B4; + iVar2 = func_80028D9C(); + puVar3 = D_801843E0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801842E0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801842E0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801842F0; +extern char *D_80184310; +extern char *D_80184314; +extern char *D_80184318; +extern char *D_8018431C; +extern char *D_80184320; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801842F0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80184310; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184314; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184318; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018431C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80184320; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801841AA; +extern unsigned short D_801841AE; +extern unsigned short D_801841B2; +extern unsigned short D_801841B6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801841AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801841AE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801841B2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801841B6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80184740[])(void); + +void func_80141788(void) +{ + D_80184740[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018474C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018474C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801846C4; +extern s16 D_801846C6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80184364; + extern u8 D_8018437C; + extern u8 D_801843F0; + extern u8 D_801843F8; + extern void *D_801BB168; + extern void *D_801BB16C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801BB168 = &D_80184364; + D_801BB16C = &D_801843F0; + } else { + D_801BB168 = &D_8018437C; + D_801BB16C = &D_801843F8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801846C4 = 0xE; + D_801846C6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801846C8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801846C8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801846C8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801846A0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801846A0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80184770[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80184770[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80184780[])(void); + +void func_801425CC(void *a0) { + D_80184780[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80184764; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80184764); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184794[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184794[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801847B0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801847B0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184980[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184980[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80184A38[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80184A38[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801BA7EC; +extern u8 D_801BB170; +extern u8 D_801BB171; +extern u8 D_801BB172; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801BA7EC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801BB170 = mul * (local.b[0] >> 4); + D_801BB171 = mul * (local.b[1] >> 4); + D_801BB172 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80184788; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80184788); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801847A4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801847A4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80184970[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80184970[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80184990[]; +extern unsigned char D_801849F0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184990); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801849F0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801BA7E8; +extern u8 D_801BB170; +extern u8 D_801BB174; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801BA7E8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801BB170); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801BB170, 0x10); + memcpy(&D_801BB174, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80184B48[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80184B48[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80184C70[])(void); + +void func_80143B30(void *a0) { + D_80184C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80184C7C[])(void); + +void func_80143C38(void *a0) { + D_80184C7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80184C84[])(void); + +void func_80143C98(void *a0) { + D_80184C84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80143D28); + + +extern void (*D_80184CCC[])(void); + +void func_80143E68(void *a0) { + D_80184CCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80184CE0[])(void); + +void func_80144054(void *a0) { + D_80184CE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184CE8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184CE8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80184C64; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80184C64, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80184C78; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80184C78 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80184C78 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80184C8C; +extern u8 D_80184C98; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184C8C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184C98); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80184C64; +extern u8 D_80184CD4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80184C64, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184CD4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80184CF0[])(void); + +void func_801449C8(void *a0) { + D_80184CF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184CF8[])(void); + +void func_80144A2C(void *a0) { + D_80184CF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c b/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c index 109b53db8..e138d215b 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801802D0; -extern u8 *D_801802D4; -extern u8 *D_801802D8; -extern u8 *D_801802DC; -extern u8 *D_801802E0; -extern u16 *D_801802E4[]; -extern u16 *D_801802EC[]; -extern u16 *D_8018030C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801802D0; - iVar2 = func_80028D58(); - puVar3 = D_801802E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801802D4; - iVar2 = func_80028DE0(); - puVar3 = D_801802E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801802D8 + 0x18) = *D_801802EC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801802DC + 0x18) = *D_801802EC[iVar2]; - - puVar1 = D_801802E0; - iVar2 = func_80028D9C(); - puVar3 = D_8018030C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018020C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018020C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018021C; -extern char *D_8018023C; -extern char *D_80180240; -extern char *D_80180244; -extern char *D_80180248; -extern char *D_8018024C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018021C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018023C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180240; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180244; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180248; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018024C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801800D6; -extern unsigned short D_801800DA; -extern unsigned short D_801800DE; -extern unsigned short D_801800E2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801800D6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801800DA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801800DE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801800E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018066C[])(void); - -void func_80141788(void) -{ - D_8018066C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180678[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180678[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801805F0; -extern s16 D_801805F2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180290; - extern u8 D_801802A8; - extern u8 D_8018031C; - extern u8 D_80180324; - extern void *D_8018E7C0; - extern void *D_8018E7C4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018E7C0 = &D_80180290; - D_8018E7C4 = &D_8018031C; - } else { - D_8018E7C0 = &D_801802A8; - D_8018E7C4 = &D_80180324; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801805F0 = 0xE; - D_801805F2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801805F4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801805F4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801805F4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801805CC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801805CC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018069C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018069C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801806AC[])(void); - -void func_801425CC(void *a0) { - D_801806AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180690; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180690); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801806C0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801806C0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801806DC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801806DC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801808AC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801808AC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180964[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180964[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018DE88; -extern u8 D_8018E7C8; -extern u8 D_8018E7C9; -extern u8 D_8018E7CA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018DE88; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018E7C8 = mul * (local.b[0] >> 4); - D_8018E7C9 = mul * (local.b[1] >> 4); - D_8018E7CA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801806B4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801806B4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801806D0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801806D0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018089C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018089C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801808BC[]; -extern unsigned char D_8018091C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801808BC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018091C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018DE84; -extern u8 D_8018E7C8; -extern u8 D_8018E7CC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018DE84, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E7C8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018E7C8, 0x10); - memcpy(&D_8018E7CC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180A74[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180A74[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180B9C[])(void); - -void func_80143B30(void *a0) { - D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180BA8[])(void); - -void func_80143C38(void *a0) { - D_80180BA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180BB0[])(void); - -void func_80143C98(void *a0) { - D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180BF8[])(void); - -void func_80143E68(void *a0) { - D_80180BF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180C0C[])(void); - -void func_80144054(void *a0) { - D_80180C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180C14[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180C14[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180B90; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180B90, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180BA4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BA4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BA4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180BB8; -extern u8 D_80180BC4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180BB8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180BC4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180B90; -extern u8 D_80180C00; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180B90, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180C00, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180C1C[])(void); - -void func_801449C8(void *a0) { - D_80180C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180C24[])(void); - -void func_80144A2C(void *a0) { - D_80180C24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC04_021/ov_SC04_021_jr_80140608.c b/src/ov_SC04_021/ov_SC04_021_jr_80140608.c new file mode 100644 index 000000000..1c6353c0c --- /dev/null +++ b/src/ov_SC04_021/ov_SC04_021_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018D4F8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F510[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018E67C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8018FAB8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018D4F8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F24C)(); +extern s16 (*D_8017F250)(); +extern M2C_UNK (*D_8017F258)(); +extern s32 (*D_8017F25C)(); +extern s32 D_8018E678; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D4FC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F5A4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182A88; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F5BC; +extern M2C_UNK D_8017F5C4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F5CC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F5E8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F5F4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F608[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F658[]; +extern s16 D_8017F688[]; +extern s16 D_8017F6E8[]; +extern s16 D_8017F6F0[]; +extern s16 D_8017F710[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F748[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F7A0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F7E8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F7F0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F7F8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F800[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F7A8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F7C8; +extern void func_801321B0(int param_1); +extern int D_8017F7D8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018E6E8; +extern s32 D_8018E6EC[]; +extern int D_8018E6F0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F80C; +extern u8 D_8017F808; +extern s16 *D_8017F810; +extern u8 D_8017F814; +extern int D_8018E6E8; +extern u16 D_8018E6F8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F810; /* holds a pointer value (*(u16**)&D_8017F810) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F824[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F878; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F87C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F8C0; +extern u8 D_8017F904; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F948[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F9C0, D_8017F9C2, D_8017F9C4, D_8017F9C6, D_8017F9C8, D_8017F9CA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018E760; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018E764; +extern s8 D_8018E765; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018E784; +extern s32 D_8018E778; +extern s32 D_8018E77C; +extern s32 D_8018E788; +extern void func_8013CABC(void); +extern s32 D_8018E780; +extern void func_8013CAE8(void); +extern s32 D_8018E7B0; +extern s32 D_8018E7B4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018E790; +extern s32 D_8018E794; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8018FAB2; +extern u8 D_8018FB2C; +extern u8 D_8018F9DA; +extern u8 D_8018FA94; +extern u8 D_8018F9B8; +extern u8 D_8018F9D9; +extern s32 D_8018FA98; +extern void func_8013D330(void); +extern void *D_8018E768; +extern void *D_8018E76C; +extern void *D_8018E770; +extern s32 D_8018E798; +extern s32 D_8018E79C; +extern s32 D_8018E7A0; +extern s32 D_8018FA0C[]; +extern u8 D_8017FAB8[]; +extern u8 D_8017FB60[]; +extern u8 D_8017FA10[]; +extern u8 D_8017FB0C[]; +extern u8 D_8017FB8C[]; +extern u8 D_8017FA64[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018E774; +extern s32 D_8018E7A4; +extern s32 D_8018E7A8; +extern s32 D_8018E7AC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018E78C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180618; +extern s32 D_80115188; +extern s16 D_801805F0; +extern s16 D_801805F2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801805F4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801802D0; +extern u8 *D_801802D4; +extern u8 *D_801802D8; +extern u8 *D_801802DC; +extern u8 *D_801802E0; +extern u16 *D_801802E4[]; +extern u16 *D_801802EC[]; +extern u16 *D_8018030C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801802D0; + iVar2 = func_80028D58(); + puVar3 = D_801802E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801802D4; + iVar2 = func_80028DE0(); + puVar3 = D_801802E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801802D8 + 0x18) = *D_801802EC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801802DC + 0x18) = *D_801802EC[iVar2]; + + puVar1 = D_801802E0; + iVar2 = func_80028D9C(); + puVar3 = D_8018030C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018020C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018020C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018021C; +extern char *D_8018023C; +extern char *D_80180240; +extern char *D_80180244; +extern char *D_80180248; +extern char *D_8018024C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018021C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018023C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180240; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180244; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180248; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018024C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801800D6; +extern unsigned short D_801800DA; +extern unsigned short D_801800DE; +extern unsigned short D_801800E2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801800D6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801800DA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801800DE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801800E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018066C[])(void); + +void func_80141788(void) +{ + D_8018066C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180678[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180678[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801805F0; +extern s16 D_801805F2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180290; + extern u8 D_801802A8; + extern u8 D_8018031C; + extern u8 D_80180324; + extern void *D_8018E7C0; + extern void *D_8018E7C4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018E7C0 = &D_80180290; + D_8018E7C4 = &D_8018031C; + } else { + D_8018E7C0 = &D_801802A8; + D_8018E7C4 = &D_80180324; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801805F0 = 0xE; + D_801805F2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801805F4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801805F4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801805F4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801805CC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801805CC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018069C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018069C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801806AC[])(void); + +void func_801425CC(void *a0) { + D_801806AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180690; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180690); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801806C0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801806C0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801806DC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801806DC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801808AC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801808AC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180964[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180964[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018DE88; +extern u8 D_8018E7C8; +extern u8 D_8018E7C9; +extern u8 D_8018E7CA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018DE88; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018E7C8 = mul * (local.b[0] >> 4); + D_8018E7C9 = mul * (local.b[1] >> 4); + D_8018E7CA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801806B4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801806B4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801806D0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801806D0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018089C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018089C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801808BC[]; +extern unsigned char D_8018091C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801808BC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018091C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018DE84; +extern u8 D_8018E7C8; +extern u8 D_8018E7CC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018DE84, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E7C8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018E7C8, 0x10); + memcpy(&D_8018E7CC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180A74[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180A74[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180B9C[])(void); + +void func_80143B30(void *a0) { + D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180BA8[])(void); + +void func_80143C38(void *a0) { + D_80180BA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180BB0[])(void); + +void func_80143C98(void *a0) { + D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80143D28); + + +extern void (*D_80180BF8[])(void); + +void func_80143E68(void *a0) { + D_80180BF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180C0C[])(void); + +void func_80144054(void *a0) { + D_80180C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180C14[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180C14[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180B90; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180B90, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180BA4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BA4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BA4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180BB8; +extern u8 D_80180BC4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180BB8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180BC4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180B90; +extern u8 D_80180C00; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180B90, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180C00, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180C1C[])(void); + +void func_801449C8(void *a0) { + D_80180C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180C24[])(void); + +void func_80144A2C(void *a0) { + D_80180C24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c b/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c index cd4699c08..e573cba19 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F2E4; -extern u8 *D_8017F2E8; -extern u8 *D_8017F2EC; -extern u8 *D_8017F2F0; -extern u8 *D_8017F2F4; -extern u16 *D_8017F2F8[]; -extern u16 *D_8017F300[]; -extern u16 *D_8017F320[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F2E4; - iVar2 = func_80028D58(); - puVar3 = D_8017F2F8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F2E8; - iVar2 = func_80028DE0(); - puVar3 = D_8017F2F8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F2EC + 0x18) = *D_8017F300[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F2F0 + 0x18) = *D_8017F300[iVar2]; - - puVar1 = D_8017F2F4; - iVar2 = func_80028D9C(); - puVar3 = D_8017F320[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017F220; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F220); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017F230; -extern char *D_8017F250; -extern char *D_8017F254; -extern char *D_8017F258; -extern char *D_8017F25C; -extern char *D_8017F260; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F230); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F250; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F254; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F258; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F25C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F260; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F0EA; -extern unsigned short D_8017F0EE; -extern unsigned short D_8017F0F2; -extern unsigned short D_8017F0F6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F0EA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F0EE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F0F2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F0F6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F680[])(void); - -void func_80141788(void) -{ - D_8017F680[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F68C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F68C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F604; -extern s16 D_8017F606; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F2A4; - extern u8 D_8017F2BC; - extern u8 D_8017F330; - extern u8 D_8017F338; - extern void *D_801998F0; - extern void *D_801998F4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801998F0 = &D_8017F2A4; - D_801998F4 = &D_8017F330; - } else { - D_801998F0 = &D_8017F2BC; - D_801998F4 = &D_8017F338; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F604 = 0xE; - D_8017F606 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F608: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F608; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F608); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F5E0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F5E0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F6B0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F6B0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F6C0[])(void); - -void func_801425CC(void *a0) { - D_8017F6C0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F6A4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F6A4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F6D4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F6D4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F6F0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F6F0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F8C0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F8C0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F978[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F978[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80198FD8; -extern u8 D_801998F8; -extern u8 D_801998F9; -extern u8 D_801998FA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80198FD8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801998F8 = mul * (local.b[0] >> 4); - D_801998F9 = mul * (local.b[1] >> 4); - D_801998FA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F6C8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F6C8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F6E4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F6E4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F8B0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F8B0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F8D0[]; -extern unsigned char D_8017F930[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F8D0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F930); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80198FD4; -extern u8 D_801998F8; -extern u8 D_801998FC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80198FD4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801998F8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801998F8, 0x10); - memcpy(&D_801998FC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017FA88[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017FA88[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017FBB0[])(void); - -void func_80143B30(void *a0) { - D_8017FBB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017FBBC[])(void); - -void func_80143C38(void *a0) { - D_8017FBBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017FBC4[])(void); - -void func_80143C98(void *a0) { - D_8017FBC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017FC0C[])(void); - -void func_80143E68(void *a0) { - D_8017FC0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017FC20[])(void); - -void func_80144054(void *a0) { - D_8017FC20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017FC28[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017FC28[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017FBA4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FBA4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017FBB8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FBB8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FBB8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017FBCC; -extern u8 D_8017FBD8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FBCC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FBD8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017FBA4; -extern u8 D_8017FC14; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FBA4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017FC14, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017FC30[])(void); - -void func_801449C8(void *a0) { - D_8017FC30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017FC38[])(void); - -void func_80144A2C(void *a0) { - D_8017FC38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_000/ov_SC05_000_jr_80140608.c b/src/ov_SC05_000/ov_SC05_000_jr_80140608.c new file mode 100644 index 000000000..c17ad2f7b --- /dev/null +++ b/src/ov_SC05_000/ov_SC05_000_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80198648; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E524[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801997AC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019ABE8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80198648; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017E260)(); +extern s16 (*D_8017E264)(); +extern M2C_UNK (*D_8017E26C)(); +extern s32 (*D_8017E270)(); +extern s32 D_801997A8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019864C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E5B8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80181A9C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E5D0; +extern M2C_UNK D_8017E5D8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E5E0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E5FC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E608[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E61C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E66C[]; +extern s16 D_8017E69C[]; +extern s16 D_8017E6FC[]; +extern s16 D_8017E704[]; +extern s16 D_8017E724[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E75C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E7B4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E7FC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E804[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E80C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E814[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E7BC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E7DC; +extern void func_801321B0(int param_1); +extern int D_8017E7EC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80199818; +extern s32 D_8019981C[]; +extern int D_80199820; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E820; +extern u8 D_8017E81C; +extern s16 *D_8017E824; +extern u8 D_8017E828; +extern int D_80199818; +extern u16 D_80199828; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E824; /* holds a pointer value (*(u16**)&D_8017E824) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E838[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E88C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E890[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E8D4; +extern u8 D_8017E918; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E95C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E9D4, D_8017E9D6, D_8017E9D8, D_8017E9DA, D_8017E9DC, D_8017E9DE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80199890; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80199894; +extern s8 D_80199895; +extern void func_8013C9C4(void * arg0); +extern s32 D_801998B4; +extern s32 D_801998A8; +extern s32 D_801998AC; +extern s32 D_801998B8; +extern void func_8013CABC(void); +extern s32 D_801998B0; +extern void func_8013CAE8(void); +extern s32 D_801998E0; +extern s32 D_801998E4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801998C0; +extern s32 D_801998C4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019ABE2; +extern u8 D_8019AC56; +extern u8 D_8019AB0A; +extern u8 D_8019ABC4; +extern u8 D_8019AAE8; +extern u8 D_8019AB09; +extern s32 D_8019ABC8; +extern void func_8013D330(void); +extern void *D_80199898; +extern void *D_8019989C; +extern void *D_801998A0; +extern s32 D_801998C8; +extern s32 D_801998CC; +extern s32 D_801998D0; +extern s32 D_8019AB3C[]; +extern u8 D_8017EACC[]; +extern u8 D_8017EB74[]; +extern u8 D_8017EA24[]; +extern u8 D_8017EB20[]; +extern u8 D_8017EBA0[]; +extern u8 D_8017EA78[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801998A4; +extern s32 D_801998D4; +extern s32 D_801998D8; +extern s32 D_801998DC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801998BC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F62C; +extern s32 D_80115188; +extern s16 D_8017F604; +extern s16 D_8017F606; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F608; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F2E4; +extern u8 *D_8017F2E8; +extern u8 *D_8017F2EC; +extern u8 *D_8017F2F0; +extern u8 *D_8017F2F4; +extern u16 *D_8017F2F8[]; +extern u16 *D_8017F300[]; +extern u16 *D_8017F320[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F2E4; + iVar2 = func_80028D58(); + puVar3 = D_8017F2F8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F2E8; + iVar2 = func_80028DE0(); + puVar3 = D_8017F2F8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F2EC + 0x18) = *D_8017F300[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F2F0 + 0x18) = *D_8017F300[iVar2]; + + puVar1 = D_8017F2F4; + iVar2 = func_80028D9C(); + puVar3 = D_8017F320[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017F220; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F220); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017F230; +extern char *D_8017F250; +extern char *D_8017F254; +extern char *D_8017F258; +extern char *D_8017F25C; +extern char *D_8017F260; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F230); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F250; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F254; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F258; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F25C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F260; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F0EA; +extern unsigned short D_8017F0EE; +extern unsigned short D_8017F0F2; +extern unsigned short D_8017F0F6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F0EA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F0EE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F0F2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F0F6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F680[])(void); + +void func_80141788(void) +{ + D_8017F680[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F68C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F68C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F604; +extern s16 D_8017F606; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F2A4; + extern u8 D_8017F2BC; + extern u8 D_8017F330; + extern u8 D_8017F338; + extern void *D_801998F0; + extern void *D_801998F4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801998F0 = &D_8017F2A4; + D_801998F4 = &D_8017F330; + } else { + D_801998F0 = &D_8017F2BC; + D_801998F4 = &D_8017F338; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F604 = 0xE; + D_8017F606 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F608: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F608; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F608); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F5E0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F5E0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F6B0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F6B0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F6C0[])(void); + +void func_801425CC(void *a0) { + D_8017F6C0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F6A4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F6A4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F6D4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F6D4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F6F0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F6F0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F8C0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F8C0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F978[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F978[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80198FD8; +extern u8 D_801998F8; +extern u8 D_801998F9; +extern u8 D_801998FA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80198FD8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801998F8 = mul * (local.b[0] >> 4); + D_801998F9 = mul * (local.b[1] >> 4); + D_801998FA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F6C8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F6C8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F6E4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F6E4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F8B0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F8B0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F8D0[]; +extern unsigned char D_8017F930[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F8D0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F930); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80198FD4; +extern u8 D_801998F8; +extern u8 D_801998FC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80198FD4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801998F8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801998F8, 0x10); + memcpy(&D_801998FC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017FA88[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017FA88[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017FBB0[])(void); + +void func_80143B30(void *a0) { + D_8017FBB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017FBBC[])(void); + +void func_80143C38(void *a0) { + D_8017FBBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017FBC4[])(void); + +void func_80143C98(void *a0) { + D_8017FBC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80143D28); + + +extern void (*D_8017FC0C[])(void); + +void func_80143E68(void *a0) { + D_8017FC0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017FC20[])(void); + +void func_80144054(void *a0) { + D_8017FC20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017FC28[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017FC28[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017FBA4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FBA4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017FBB8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017FBB8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017FBB8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017FBCC; +extern u8 D_8017FBD8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FBCC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FBD8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017FBA4; +extern u8 D_8017FC14; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FBA4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017FC14, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017FC30[])(void); + +void func_801449C8(void *a0) { + D_8017FC30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017FC38[])(void); + +void func_80144A2C(void *a0) { + D_8017FC38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c b/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c index 4649d6ba8..13d1ee7c0 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80186AC0; -extern u8 *D_80186AC4; -extern u8 *D_80186AC8; -extern u8 *D_80186ACC; -extern u8 *D_80186AD0; -extern u16 *D_80186AD4[]; -extern u16 *D_80186ADC[]; -extern u16 *D_80186AFC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80186AC0; - iVar2 = func_80028D58(); - puVar3 = D_80186AD4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80186AC4; - iVar2 = func_80028DE0(); - puVar3 = D_80186AD4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80186AC8 + 0x18) = *D_80186ADC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80186ACC + 0x18) = *D_80186ADC[iVar2]; - - puVar1 = D_80186AD0; - iVar2 = func_80028D9C(); - puVar3 = D_80186AFC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801869FC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801869FC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80186A0C; -extern char *D_80186A2C; -extern char *D_80186A30; -extern char *D_80186A34; -extern char *D_80186A38; -extern char *D_80186A3C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80186A0C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80186A2C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186A30; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186A34; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186A38; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186A3C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801868C6; -extern unsigned short D_801868CA; -extern unsigned short D_801868CE; -extern unsigned short D_801868D2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801868C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801868CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801868CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801868D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186E5C[])(void); - -void func_80141788(void) -{ - D_80186E5C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186E68[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186E68[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186DE0; -extern s16 D_80186DE2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186A80; - extern u8 D_80186A98; - extern u8 D_80186B0C; - extern u8 D_80186B14; - extern void *D_801B49B0; - extern void *D_801B49B4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B49B0 = &D_80186A80; - D_801B49B4 = &D_80186B0C; - } else { - D_801B49B0 = &D_80186A98; - D_801B49B4 = &D_80186B14; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186DE0 = 0xE; - D_80186DE2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186DE4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186DE4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186DE4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186DBC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186DBC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186E8C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186E8C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186E9C[])(void); - -void func_801425CC(void *a0) { - D_80186E9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186E80; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186E80); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186EB0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186EB0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186ECC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186ECC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018709C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018709C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187154[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187154[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B3F8C; -extern u8 D_801B49B8; -extern u8 D_801B49B9; -extern u8 D_801B49BA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B3F8C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B49B8 = mul * (local.b[0] >> 4); - D_801B49B9 = mul * (local.b[1] >> 4); - D_801B49BA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80186EA4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186EA4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186EC0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186EC0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018708C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018708C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801870AC[]; -extern unsigned char D_8018710C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801870AC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018710C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B3F88; -extern u8 D_801B49B8; -extern u8 D_801B49BC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B3F88, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B49B8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B49B8, 0x10); - memcpy(&D_801B49BC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80187264[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80187264[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018738C[])(void); - -void func_80143B30(void *a0) { - D_8018738C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80187398[])(void); - -void func_80143C38(void *a0) { - D_80187398[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801873A0[])(void); - -void func_80143C98(void *a0) { - D_801873A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80143D28); - - -extern void (*D_801873E8[])(void); - -void func_80143E68(void *a0) { - D_801873E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801873FC[])(void); - -void func_80144054(void *a0) { - D_801873FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80187404[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80187404[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80187380; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80187380, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80187394; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187394 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187394 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801873A8; -extern u8 D_801873B4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801873A8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801873B4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80187380; -extern u8 D_801873F0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80187380, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801873F0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018740C[])(void); - -void func_801449C8(void *a0) { - D_8018740C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80187414[])(void); - -void func_80144A2C(void *a0) { - D_80187414[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_001/ov_SC05_001_jr_80140608.c b/src/ov_SC05_001/ov_SC05_001_jr_80140608.c new file mode 100644 index 000000000..32db2619a --- /dev/null +++ b/src/ov_SC05_001/ov_SC05_001_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B35FC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80185D00[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B486C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B5F98; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B35FC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80185A3C)(); +extern s16 (*D_80185A40)(); +extern M2C_UNK (*D_80185A48)(); +extern s32 (*D_80185A4C)(); +extern s32 D_801B4868; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B3600; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80185D94; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80189278; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185DAC; +extern M2C_UNK D_80185DB4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185DBC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185DD8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185DE4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185DF8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185E48[]; +extern s16 D_80185E78[]; +extern s16 D_80185ED8[]; +extern s16 D_80185EE0[]; +extern s16 D_80185F00[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80185F38[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185F90[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185FD8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185FE0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80185FE8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80185FF0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80185F98; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80185FB8; +extern void func_801321B0(int param_1); +extern int D_80185FC8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B48D8; +extern s32 D_801B48DC[]; +extern int D_801B48E0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185FFC; +extern u8 D_80185FF8; +extern s16 *D_80186000; +extern u8 D_80186004; +extern int D_801B48D8; +extern u16 D_801B48E8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186000; /* holds a pointer value (*(u16**)&D_80186000) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186014[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80186068; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018606C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801860B0; +extern u8 D_801860F4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80186138[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801861B0, D_801861B2, D_801861B4, D_801861B6, D_801861B8, D_801861BA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B4950; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B4954; +extern s8 D_801B4955; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B4974; +extern s32 D_801B4968; +extern s32 D_801B496C; +extern s32 D_801B4978; +extern void func_8013CABC(void); +extern s32 D_801B4970; +extern void func_8013CAE8(void); +extern s32 D_801B49A0; +extern s32 D_801B49A4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B4980; +extern s32 D_801B4984; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B5F92; +extern u8 D_801B6006; +extern u8 D_801B5EBA; +extern u8 D_801B5F74; +extern u8 D_801B5E98; +extern u8 D_801B5EB9; +extern s32 D_801B5F78; +extern void func_8013D330(void); +extern void *D_801B4958; +extern void *D_801B495C; +extern void *D_801B4960; +extern s32 D_801B4988; +extern s32 D_801B498C; +extern s32 D_801B4990; +extern s32 D_801B5EEC[]; +extern u8 D_801862A8[]; +extern u8 D_80186350[]; +extern u8 D_80186200[]; +extern u8 D_801862FC[]; +extern u8 D_8018637C[]; +extern u8 D_80186254[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B4964; +extern s32 D_801B4994; +extern s32 D_801B4998; +extern s32 D_801B499C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B497C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80186E08; +extern s32 D_80115188; +extern s16 D_80186DE0; +extern s16 D_80186DE2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186DE4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80186AC0; +extern u8 *D_80186AC4; +extern u8 *D_80186AC8; +extern u8 *D_80186ACC; +extern u8 *D_80186AD0; +extern u16 *D_80186AD4[]; +extern u16 *D_80186ADC[]; +extern u16 *D_80186AFC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80186AC0; + iVar2 = func_80028D58(); + puVar3 = D_80186AD4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80186AC4; + iVar2 = func_80028DE0(); + puVar3 = D_80186AD4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80186AC8 + 0x18) = *D_80186ADC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80186ACC + 0x18) = *D_80186ADC[iVar2]; + + puVar1 = D_80186AD0; + iVar2 = func_80028D9C(); + puVar3 = D_80186AFC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801869FC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801869FC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80186A0C; +extern char *D_80186A2C; +extern char *D_80186A30; +extern char *D_80186A34; +extern char *D_80186A38; +extern char *D_80186A3C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80186A0C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80186A2C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186A30; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186A34; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186A38; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186A3C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801868C6; +extern unsigned short D_801868CA; +extern unsigned short D_801868CE; +extern unsigned short D_801868D2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801868C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801868CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801868CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801868D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186E5C[])(void); + +void func_80141788(void) +{ + D_80186E5C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186E68[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186E68[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186DE0; +extern s16 D_80186DE2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186A80; + extern u8 D_80186A98; + extern u8 D_80186B0C; + extern u8 D_80186B14; + extern void *D_801B49B0; + extern void *D_801B49B4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B49B0 = &D_80186A80; + D_801B49B4 = &D_80186B0C; + } else { + D_801B49B0 = &D_80186A98; + D_801B49B4 = &D_80186B14; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186DE0 = 0xE; + D_80186DE2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186DE4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186DE4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186DE4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186DBC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186DBC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186E8C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186E8C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186E9C[])(void); + +void func_801425CC(void *a0) { + D_80186E9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186E80; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186E80); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186EB0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186EB0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186ECC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186ECC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018709C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018709C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187154[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187154[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B3F8C; +extern u8 D_801B49B8; +extern u8 D_801B49B9; +extern u8 D_801B49BA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B3F8C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B49B8 = mul * (local.b[0] >> 4); + D_801B49B9 = mul * (local.b[1] >> 4); + D_801B49BA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80186EA4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186EA4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186EC0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186EC0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018708C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018708C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801870AC[]; +extern unsigned char D_8018710C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801870AC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018710C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B3F88; +extern u8 D_801B49B8; +extern u8 D_801B49BC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B3F88, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B49B8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B49B8, 0x10); + memcpy(&D_801B49BC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80187264[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80187264[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018738C[])(void); + +void func_80143B30(void *a0) { + D_8018738C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80187398[])(void); + +void func_80143C38(void *a0) { + D_80187398[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801873A0[])(void); + +void func_80143C98(void *a0) { + D_801873A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80143D28); + + +extern void (*D_801873E8[])(void); + +void func_80143E68(void *a0) { + D_801873E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801873FC[])(void); + +void func_80144054(void *a0) { + D_801873FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80187404[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80187404[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187380; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80187380, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80187394; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187394 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187394 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801873A8; +extern u8 D_801873B4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801873A8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801873B4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80187380; +extern u8 D_801873F0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80187380, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801873F0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018740C[])(void); + +void func_801449C8(void *a0) { + D_8018740C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80187414[])(void); + +void func_80144A2C(void *a0) { + D_80187414[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c b/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c index 6881b453a..ed7d7122b 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181280; -extern u8 *D_80181284; -extern u8 *D_80181288; -extern u8 *D_8018128C; -extern u8 *D_80181290; -extern u16 *D_80181294[]; -extern u16 *D_8018129C[]; -extern u16 *D_801812BC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181280; - iVar2 = func_80028D58(); - puVar3 = D_80181294[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181284; - iVar2 = func_80028DE0(); - puVar3 = D_80181294[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80181288 + 0x18) = *D_8018129C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018128C + 0x18) = *D_8018129C[iVar2]; - - puVar1 = D_80181290; - iVar2 = func_80028D9C(); - puVar3 = D_801812BC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801811BC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801811BC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801811CC; -extern char *D_801811EC; -extern char *D_801811F0; -extern char *D_801811F4; -extern char *D_801811F8; -extern char *D_801811FC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801811CC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801811EC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801811F0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801811F4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801811F8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801811FC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80181086; -extern unsigned short D_8018108A; -extern unsigned short D_8018108E; -extern unsigned short D_80181092; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80181086; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018108A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018108E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80181092; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018161C[])(void); - -void func_80141788(void) -{ - D_8018161C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80181628[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80181628[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801815A0; -extern s16 D_801815A2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181240; - extern u8 D_80181258; - extern u8 D_801812CC; - extern u8 D_801812D4; - extern void *D_8019EC50; - extern void *D_8019EC54; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019EC50 = &D_80181240; - D_8019EC54 = &D_801812CC; - } else { - D_8019EC50 = &D_80181258; - D_8019EC54 = &D_801812D4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801815A0 = 0xE; - D_801815A2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801815A4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801815A4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801815A4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018157C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018157C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018164C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018164C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018165C[])(void); - -void func_801425CC(void *a0) { - D_8018165C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80181640; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80181640); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181670[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181670[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018168C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018168C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018185C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018185C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181914[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181914[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019E338; -extern u8 D_8019EC58; -extern u8 D_8019EC59; -extern u8 D_8019EC5A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019E338; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019EC58 = mul * (local.b[0] >> 4); - D_8019EC59 = mul * (local.b[1] >> 4); - D_8019EC5A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80181664; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181664); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181680[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181680); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018184C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018184C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018186C[]; -extern unsigned char D_801818CC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018186C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801818CC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019E334; -extern u8 D_8019EC58; -extern u8 D_8019EC5C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019E334, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019EC58); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019EC58, 0x10); - memcpy(&D_8019EC5C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80181A24[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80181A24[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80181B4C[])(void); - -void func_80143B30(void *a0) { - D_80181B4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80181B58[])(void); - -void func_80143C38(void *a0) { - D_80181B58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80181B60[])(void); - -void func_80143C98(void *a0) { - D_80181B60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80143D28); - - -extern void (*D_80181BA8[])(void); - -void func_80143E68(void *a0) { - D_80181BA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80181BBC[])(void); - -void func_80144054(void *a0) { - D_80181BBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80181BC4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80181BC4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80181B40; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80181B40, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80181B54; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181B54 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181B54 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80181B68; -extern u8 D_80181B74; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181B68); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181B74); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80181B40; -extern u8 D_80181BB0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80181B40, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80181BB0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80181BCC[])(void); - -void func_801449C8(void *a0) { - D_80181BCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80181BD4[])(void); - -void func_80144A2C(void *a0) { - D_80181BD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_002/ov_SC05_002_jr_80140608.c b/src/ov_SC05_002/ov_SC05_002_jr_80140608.c new file mode 100644 index 000000000..006d58c6d --- /dev/null +++ b/src/ov_SC05_002/ov_SC05_002_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019D9A8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801804C0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019EB0C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019FF50; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019D9A8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801801FC)(); +extern s16 (*D_80180200)(); +extern M2C_UNK (*D_80180208)(); +extern s32 (*D_8018020C)(); +extern s32 D_8019EB08; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019D9AC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80180554; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80183A38; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018056C; +extern M2C_UNK D_80180574; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018057C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80180598[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801805A4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801805B8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80180608[]; +extern s16 D_80180638[]; +extern s16 D_80180698[]; +extern s16 D_801806A0[]; +extern s16 D_801806C0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801806F8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80180750[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80180798[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801807A0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801807A8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801807B0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80180758; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80180778; +extern void func_801321B0(int param_1); +extern int D_80180788; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019EB78; +extern s32 D_8019EB7C[]; +extern int D_8019EB80; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801807BC; +extern u8 D_801807B8; +extern s16 *D_801807C0; +extern u8 D_801807C4; +extern int D_8019EB78; +extern u16 D_8019EB88; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801807C0; /* holds a pointer value (*(u16**)&D_801807C0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801807D4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80180828; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018082C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80180870; +extern u8 D_801808B4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801808F8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80180970, D_80180972, D_80180974, D_80180976, D_80180978, D_8018097A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019EBF0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019EBF4; +extern s8 D_8019EBF5; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019EC14; +extern s32 D_8019EC08; +extern s32 D_8019EC0C; +extern s32 D_8019EC18; +extern void func_8013CABC(void); +extern s32 D_8019EC10; +extern void func_8013CAE8(void); +extern s32 D_8019EC40; +extern s32 D_8019EC44; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019EC20; +extern s32 D_8019EC24; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019FF4A; +extern u8 D_8019FFBE; +extern u8 D_8019FE72; +extern u8 D_8019FF2C; +extern u8 D_8019FE50; +extern u8 D_8019FE71; +extern s32 D_8019FF30; +extern void func_8013D330(void); +extern void *D_8019EBF8; +extern void *D_8019EBFC; +extern void *D_8019EC00; +extern s32 D_8019EC28; +extern s32 D_8019EC2C; +extern s32 D_8019EC30; +extern s32 D_8019FEA4[]; +extern u8 D_80180A68[]; +extern u8 D_80180B10[]; +extern u8 D_801809C0[]; +extern u8 D_80180ABC[]; +extern u8 D_80180B3C[]; +extern u8 D_80180A14[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019EC04; +extern s32 D_8019EC34; +extern s32 D_8019EC38; +extern s32 D_8019EC3C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019EC1C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801815C8; +extern s32 D_80115188; +extern s16 D_801815A0; +extern s16 D_801815A2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801815A4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181280; +extern u8 *D_80181284; +extern u8 *D_80181288; +extern u8 *D_8018128C; +extern u8 *D_80181290; +extern u16 *D_80181294[]; +extern u16 *D_8018129C[]; +extern u16 *D_801812BC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181280; + iVar2 = func_80028D58(); + puVar3 = D_80181294[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181284; + iVar2 = func_80028DE0(); + puVar3 = D_80181294[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80181288 + 0x18) = *D_8018129C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018128C + 0x18) = *D_8018129C[iVar2]; + + puVar1 = D_80181290; + iVar2 = func_80028D9C(); + puVar3 = D_801812BC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801811BC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801811BC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801811CC; +extern char *D_801811EC; +extern char *D_801811F0; +extern char *D_801811F4; +extern char *D_801811F8; +extern char *D_801811FC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801811CC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801811EC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801811F0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801811F4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801811F8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801811FC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80181086; +extern unsigned short D_8018108A; +extern unsigned short D_8018108E; +extern unsigned short D_80181092; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80181086; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018108A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018108E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80181092; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018161C[])(void); + +void func_80141788(void) +{ + D_8018161C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80181628[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80181628[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801815A0; +extern s16 D_801815A2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181240; + extern u8 D_80181258; + extern u8 D_801812CC; + extern u8 D_801812D4; + extern void *D_8019EC50; + extern void *D_8019EC54; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019EC50 = &D_80181240; + D_8019EC54 = &D_801812CC; + } else { + D_8019EC50 = &D_80181258; + D_8019EC54 = &D_801812D4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801815A0 = 0xE; + D_801815A2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801815A4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801815A4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801815A4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018157C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018157C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018164C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018164C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018165C[])(void); + +void func_801425CC(void *a0) { + D_8018165C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80181640; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80181640); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181670[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181670[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018168C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018168C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018185C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018185C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181914[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181914[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019E338; +extern u8 D_8019EC58; +extern u8 D_8019EC59; +extern u8 D_8019EC5A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019E338; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019EC58 = mul * (local.b[0] >> 4); + D_8019EC59 = mul * (local.b[1] >> 4); + D_8019EC5A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80181664; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181664); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181680[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181680); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018184C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018184C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018186C[]; +extern unsigned char D_801818CC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018186C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801818CC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019E334; +extern u8 D_8019EC58; +extern u8 D_8019EC5C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019E334, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019EC58); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019EC58, 0x10); + memcpy(&D_8019EC5C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80181A24[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80181A24[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80181B4C[])(void); + +void func_80143B30(void *a0) { + D_80181B4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80181B58[])(void); + +void func_80143C38(void *a0) { + D_80181B58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80181B60[])(void); + +void func_80143C98(void *a0) { + D_80181B60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80143D28); + + +extern void (*D_80181BA8[])(void); + +void func_80143E68(void *a0) { + D_80181BA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80181BBC[])(void); + +void func_80144054(void *a0) { + D_80181BBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80181BC4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80181BC4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181B40; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80181B40, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80181B54; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181B54 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181B54 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80181B68; +extern u8 D_80181B74; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181B68); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181B74); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80181B40; +extern u8 D_80181BB0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80181B40, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80181BB0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80181BCC[])(void); + +void func_801449C8(void *a0) { + D_80181BCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80181BD4[])(void); + +void func_80144A2C(void *a0) { + D_80181BD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c b/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c index 23afe6bfa..016fcd3d3 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801835B8; -extern u8 *D_801835BC; -extern u8 *D_801835C0; -extern u8 *D_801835C4; -extern u8 *D_801835C8; -extern u16 *D_801835CC[]; -extern u16 *D_801835D4[]; -extern u16 *D_801835F4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801835B8; - iVar2 = func_80028D58(); - puVar3 = D_801835CC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801835BC; - iVar2 = func_80028DE0(); - puVar3 = D_801835CC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801835C0 + 0x18) = *D_801835D4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801835C4 + 0x18) = *D_801835D4[iVar2]; - - puVar1 = D_801835C8; - iVar2 = func_80028D9C(); - puVar3 = D_801835F4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801834F4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801834F4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183504; -extern char *D_80183524; -extern char *D_80183528; -extern char *D_8018352C; -extern char *D_80183530; -extern char *D_80183534; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183504); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183524; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183528; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018352C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183530; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183534; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801833BE; -extern unsigned short D_801833C2; -extern unsigned short D_801833C6; -extern unsigned short D_801833CA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801833BE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801833C2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801833C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801833CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183954[])(void); - -void func_80141788(void) -{ - D_80183954[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183960[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183960[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801838D8; -extern s16 D_801838DA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80183578; - extern u8 D_80183590; - extern u8 D_80183604; - extern u8 D_8018360C; - extern void *D_801AB760; - extern void *D_801AB764; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801AB760 = &D_80183578; - D_801AB764 = &D_80183604; - } else { - D_801AB760 = &D_80183590; - D_801AB764 = &D_8018360C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801838D8 = 0xE; - D_801838DA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801838DC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801838DC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801838DC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801838B4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801838B4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183984[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183984[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80183994[])(void); - -void func_801425CC(void *a0) { - D_80183994[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183978; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183978); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801839A8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801839A8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801839C4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801839C4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183B94[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183B94[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183C4C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183C4C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801AAE34; -extern u8 D_801AB768; -extern u8 D_801AB769; -extern u8 D_801AB76A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801AAE34; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801AB768 = mul * (local.b[0] >> 4); - D_801AB769 = mul * (local.b[1] >> 4); - D_801AB76A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018399C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018399C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801839B8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801839B8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183B84[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183B84[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183BA4[]; -extern unsigned char D_80183C04[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183BA4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183C04); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801AAE30; -extern u8 D_801AB768; -extern u8 D_801AB76C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801AAE30, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801AB768); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801AB768, 0x10); - memcpy(&D_801AB76C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183D5C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183D5C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183E84[])(void); - -void func_80143B30(void *a0) { - D_80183E84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183E90[])(void); - -void func_80143C38(void *a0) { - D_80183E90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183E98[])(void); - -void func_80143C98(void *a0) { - D_80183E98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183EE0[])(void); - -void func_80143E68(void *a0) { - D_80183EE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183EF4[])(void); - -void func_80144054(void *a0) { - D_80183EF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183EFC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183EFC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183E78; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183E78, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183E8C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183E8C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183E8C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183EA0; -extern u8 D_80183EAC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183EA0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183EAC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183E78; -extern u8 D_80183EE8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183E78, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183EE8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183F04[])(void); - -void func_801449C8(void *a0) { - D_80183F04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183F0C[])(void); - -void func_80144A2C(void *a0) { - D_80183F0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_003/ov_SC05_003_jr_80140608.c b/src/ov_SC05_003/ov_SC05_003_jr_80140608.c new file mode 100644 index 000000000..dfa6a4fd2 --- /dev/null +++ b/src/ov_SC05_003/ov_SC05_003_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AA4A4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801827F8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801AB61C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801ACA60; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AA4A4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182534)(); +extern s16 (*D_80182538)(); +extern M2C_UNK (*D_80182540)(); +extern s32 (*D_80182544)(); +extern s32 D_801AB618; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AA4A8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018288C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185D70; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801828A4; +extern M2C_UNK D_801828AC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801828B4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801828D0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801828DC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801828F0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182940[]; +extern s16 D_80182970[]; +extern s16 D_801829D0[]; +extern s16 D_801829D8[]; +extern s16 D_801829F8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182A30[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182A88[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80182AD0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182AD8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182AE0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182AE8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182A90; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182AB0; +extern void func_801321B0(int param_1); +extern int D_80182AC0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801AB688; +extern s32 D_801AB68C[]; +extern int D_801AB690; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182AF4; +extern u8 D_80182AF0; +extern s16 *D_80182AF8; +extern u8 D_80182AFC; +extern int D_801AB688; +extern u16 D_801AB698; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182AF8; /* holds a pointer value (*(u16**)&D_80182AF8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182B0C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182B60; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182B64[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80182BA8; +extern u8 D_80182BEC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182C30[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182CA8, D_80182CAA, D_80182CAC, D_80182CAE, D_80182CB0, D_80182CB2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801AB700; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801AB704; +extern s8 D_801AB705; +extern void func_8013C9C4(void * arg0); +extern s32 D_801AB724; +extern s32 D_801AB718; +extern s32 D_801AB71C; +extern s32 D_801AB728; +extern void func_8013CABC(void); +extern s32 D_801AB720; +extern void func_8013CAE8(void); +extern s32 D_801AB750; +extern s32 D_801AB754; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801AB730; +extern s32 D_801AB734; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801ACA5A; +extern u8 D_801ACACE; +extern u8 D_801AC982; +extern u8 D_801ACA3C; +extern u8 D_801AC960; +extern u8 D_801AC981; +extern s32 D_801ACA40; +extern void func_8013D330(void); +extern void *D_801AB708; +extern void *D_801AB70C; +extern void *D_801AB710; +extern s32 D_801AB738; +extern s32 D_801AB73C; +extern s32 D_801AB740; +extern s32 D_801AC9B4[]; +extern u8 D_80182DA0[]; +extern u8 D_80182E48[]; +extern u8 D_80182CF8[]; +extern u8 D_80182DF4[]; +extern u8 D_80182E74[]; +extern u8 D_80182D4C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801AB714; +extern s32 D_801AB744; +extern s32 D_801AB748; +extern s32 D_801AB74C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801AB72C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183900; +extern s32 D_80115188; +extern s16 D_801838D8; +extern s16 D_801838DA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801838DC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801835B8; +extern u8 *D_801835BC; +extern u8 *D_801835C0; +extern u8 *D_801835C4; +extern u8 *D_801835C8; +extern u16 *D_801835CC[]; +extern u16 *D_801835D4[]; +extern u16 *D_801835F4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801835B8; + iVar2 = func_80028D58(); + puVar3 = D_801835CC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801835BC; + iVar2 = func_80028DE0(); + puVar3 = D_801835CC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801835C0 + 0x18) = *D_801835D4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801835C4 + 0x18) = *D_801835D4[iVar2]; + + puVar1 = D_801835C8; + iVar2 = func_80028D9C(); + puVar3 = D_801835F4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801834F4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801834F4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183504; +extern char *D_80183524; +extern char *D_80183528; +extern char *D_8018352C; +extern char *D_80183530; +extern char *D_80183534; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183504); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183524; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183528; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018352C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183530; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183534; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801833BE; +extern unsigned short D_801833C2; +extern unsigned short D_801833C6; +extern unsigned short D_801833CA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801833BE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801833C2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801833C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801833CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183954[])(void); + +void func_80141788(void) +{ + D_80183954[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183960[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183960[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801838D8; +extern s16 D_801838DA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80183578; + extern u8 D_80183590; + extern u8 D_80183604; + extern u8 D_8018360C; + extern void *D_801AB760; + extern void *D_801AB764; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801AB760 = &D_80183578; + D_801AB764 = &D_80183604; + } else { + D_801AB760 = &D_80183590; + D_801AB764 = &D_8018360C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801838D8 = 0xE; + D_801838DA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801838DC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801838DC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801838DC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801838B4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801838B4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183984[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183984[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80183994[])(void); + +void func_801425CC(void *a0) { + D_80183994[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183978; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183978); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801839A8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801839A8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801839C4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801839C4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183B94[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183B94[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183C4C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183C4C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801AAE34; +extern u8 D_801AB768; +extern u8 D_801AB769; +extern u8 D_801AB76A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801AAE34; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801AB768 = mul * (local.b[0] >> 4); + D_801AB769 = mul * (local.b[1] >> 4); + D_801AB76A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018399C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018399C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801839B8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801839B8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183B84[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183B84[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183BA4[]; +extern unsigned char D_80183C04[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183BA4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183C04); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801AAE30; +extern u8 D_801AB768; +extern u8 D_801AB76C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801AAE30, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801AB768); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801AB768, 0x10); + memcpy(&D_801AB76C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183D5C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183D5C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183E84[])(void); + +void func_80143B30(void *a0) { + D_80183E84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183E90[])(void); + +void func_80143C38(void *a0) { + D_80183E90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183E98[])(void); + +void func_80143C98(void *a0) { + D_80183E98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80143D28); + + +extern void (*D_80183EE0[])(void); + +void func_80143E68(void *a0) { + D_80183EE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183EF4[])(void); + +void func_80144054(void *a0) { + D_80183EF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183EFC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183EFC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183E78; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183E78, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183E8C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183E8C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183E8C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183EA0; +extern u8 D_80183EAC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183EA0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183EAC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183E78; +extern u8 D_80183EE8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183E78, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183EE8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183F04[])(void); + +void func_801449C8(void *a0) { + D_80183F04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183F0C[])(void); + +void func_80144A2C(void *a0) { + D_80183F0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c b/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c index d9a789baf..1b8f6d437 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c @@ -1399,1168 +1399,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801826C4; -extern u8 *D_801826C8; -extern u8 *D_801826CC; -extern u8 *D_801826D0; -extern u8 *D_801826D4; -extern u16 *D_801826D8[]; -extern u16 *D_801826E0[]; -extern u16 *D_80182700[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801826C4; - iVar2 = func_80028D58(); - puVar3 = D_801826D8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801826C8; - iVar2 = func_80028DE0(); - puVar3 = D_801826D8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801826CC + 0x18) = *D_801826E0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801826D0 + 0x18) = *D_801826E0[iVar2]; - - puVar1 = D_801826D4; - iVar2 = func_80028D9C(); - puVar3 = D_80182700[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80182600; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80182600); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80182610; -extern char *D_80182630; -extern char *D_80182634; -extern char *D_80182638; -extern char *D_8018263C; -extern char *D_80182640; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80182610); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80182630; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182634; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182638; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018263C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182640; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801824CA; -extern unsigned short D_801824CE; -extern unsigned short D_801824D2; -extern unsigned short D_801824D6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801824CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801824CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801824D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801824D6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80182A60[])(void); - -void func_80141788(void) -{ - D_80182A60[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80182A6C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80182A6C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; -extern s16 D_801829E4; -extern s16 D_801829E6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182684; - extern u8 D_8018269C; - extern u8 D_80182710; - extern u8 D_80182718; - extern void *D_8019DDD8; - extern void *D_8019DDDC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019DDD8 = &D_80182684; - D_8019DDDC = &D_80182710; - } else { - D_8019DDD8 = &D_8018269C; - D_8019DDDC = &D_80182718; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801829E4 = 0xE; - D_801829E6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801829E8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u8 D_801829E8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801829E8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801829C0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801829C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80182A90[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80182A90[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80182AA0[])(void); - -void func_801425CC(void *a0) { - D_80182AA0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80182A84; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80182A84); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182AB4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182AB4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182AD0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182AD0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182CA0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182CA0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182D58[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182D58[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019D428; -extern u8 D_8019DDE0; -extern u8 D_8019DDE1; -extern u8 D_8019DDE2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019D428; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019DDE0 = mul * (local.b[0] >> 4); - D_8019DDE1 = mul * (local.b[1] >> 4); - D_8019DDE2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80182AA8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80182AA8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80182AC4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80182AC4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80182C90[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80182C90[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80182CB0[]; -extern unsigned char D_80182D10[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182CB0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80182D10); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019D424; -extern u8 D_8019DDE0; -extern u8 D_8019DDE4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019D424, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019DDE0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019DDE0, 0x10); - memcpy(&D_8019DDE4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80182E68[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80182E68[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80182F90[])(void); - -void func_80143B30(void *a0) { - D_80182F90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80182F9C[])(void); - -void func_80143C38(void *a0) { - D_80182F9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80182FA4[])(void); - -void func_80143C98(void *a0) { - D_80182FA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80143D28); - - -extern void (*D_80182FEC[])(void); - -void func_80143E68(void *a0) { - D_80182FEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183000[])(void); - -void func_80144054(void *a0) { - D_80183000[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183008[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183008[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80182F84; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80182F84, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80182F98; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182F98 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182F98 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80182FAC; -extern u8 D_80182FB8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182FAC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182FB8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80182F84; -extern u8 D_80182FF4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80182F84, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80182FF4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183010[])(void); - -void func_801449C8(void *a0) { - D_80183010[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183018[])(void); - -void func_80144A2C(void *a0) { - D_80183018[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8013F350", func_80144B14); - - diff --git a/src/ov_SC05_004/ov_SC05_004_jr_80140608.c b/src/ov_SC05_004/ov_SC05_004_jr_80140608.c new file mode 100644 index 000000000..b2c136b84 --- /dev/null +++ b/src/ov_SC05_004/ov_SC05_004_jr_80140608.c @@ -0,0 +1,2248 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019CA98; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80181904[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019DC94; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019F2B8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019CA98; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80181640)(); +extern s16 (*D_80181644)(); +extern M2C_UNK (*D_8018164C)(); +extern s32 (*D_80181650)(); +extern s32 D_8019DC90; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019CA9C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80181998; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80184E7C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801819B0; +extern M2C_UNK D_801819B8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801819C0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801819DC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801819E8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801819FC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80181A4C[]; +extern s16 D_80181A7C[]; +extern s16 D_80181ADC[]; +extern s16 D_80181AE4[]; +extern s16 D_80181B04[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80181B3C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80181B94[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80181BDC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80181BE4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80181BEC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80181BF4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80181B9C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80181BBC; +extern void func_801321B0(int param_1); +extern int D_80181BCC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019DD00; +extern s32 D_8019DD04[]; +extern int D_8019DD08; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80181C00; +extern u8 D_80181BFC; +extern s16 *D_80181C04; +extern u8 D_80181C08; +extern int D_8019DD00; +extern u16 D_8019DD10; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80181C04; /* holds a pointer value (*(u16**)&D_80181C04) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80181C18[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80181C6C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_801380E0(s32 arg0); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80181C70[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80181CB4; +extern u8 D_80181CF8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80181D3C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80181DB4, D_80181DB6, D_80181DB8, D_80181DBA, D_80181DBC, D_80181DBE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019DD78; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019DD7C; +extern s8 D_8019DD7D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019DD9C; +extern s32 D_8019DD90; +extern s32 D_8019DD94; +extern s32 D_8019DDA0; +extern void func_8013CABC(void); +extern s32 D_8019DD98; +extern void func_8013CAE8(void); +extern s32 D_8019DDC8; +extern s32 D_8019DDCC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019DDA8; +extern s32 D_8019DDAC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern u8 D_8019F2B2; +extern u8 D_8019F326; +extern u8 D_8019F1DA; +extern u8 D_8019F294; +extern u8 D_8019F1B8; +extern u8 D_8019F1D9; +extern s32 D_8019F298; +extern void func_8013D330(void); +extern void *D_8019DD80; +extern void *D_8019DD84; +extern void *D_8019DD88; +extern s32 D_8019DDB0; +extern s32 D_8019DDB4; +extern s32 D_8019DDB8; +extern s32 D_8019F20C[]; +extern u8 D_80181EAC[]; +extern u8 D_80181F54[]; +extern u8 D_80181E04[]; +extern u8 D_80181F00[]; +extern u8 D_80181F80[]; +extern u8 D_80181E58[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019DD8C; +extern s32 D_8019DDBC; +extern s32 D_8019DDC0; +extern s32 D_8019DDC4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019DDA4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80182A0C; +extern s32 D_80115188; +extern s16 D_801829E4; +extern s16 D_801829E6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801829E8; +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern u16 D_8011512E; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_80182708[]; +extern u8 D_80182720[]; +extern u16 D_80182624[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801826C4; +extern u8 *D_801826C8; +extern u8 *D_801826CC; +extern u8 *D_801826D0; +extern u8 *D_801826D4; +extern u16 *D_801826D8[]; +extern u16 *D_801826E0[]; +extern u16 *D_80182700[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801826C4; + iVar2 = func_80028D58(); + puVar3 = D_801826D8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801826C8; + iVar2 = func_80028DE0(); + puVar3 = D_801826D8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801826CC + 0x18) = *D_801826E0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801826D0 + 0x18) = *D_801826E0[iVar2]; + + puVar1 = D_801826D4; + iVar2 = func_80028D9C(); + puVar3 = D_80182700[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80182600; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80182600); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80182610; +extern char *D_80182630; +extern char *D_80182634; +extern char *D_80182638; +extern char *D_8018263C; +extern char *D_80182640; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80182610); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80182630; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182634; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182638; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018263C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182640; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801824CA; +extern unsigned short D_801824CE; +extern unsigned short D_801824D2; +extern unsigned short D_801824D6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801824CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801824CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801824D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801824D6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80182A60[])(void); + +void func_80141788(void) +{ + D_80182A60[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80182A6C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80182A6C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; +extern s16 D_801829E4; +extern s16 D_801829E6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182684; + extern u8 D_8018269C; + extern u8 D_80182710; + extern u8 D_80182718; + extern void *D_8019DDD8; + extern void *D_8019DDDC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019DDD8 = &D_80182684; + D_8019DDDC = &D_80182710; + } else { + D_8019DDD8 = &D_8018269C; + D_8019DDDC = &D_80182718; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801829E4 = 0xE; + D_801829E6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801829E8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u8 D_801829E8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801829E8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801829C0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801829C0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80182A90[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80182A90[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80182AA0[])(void); + +void func_801425CC(void *a0) { + D_80182AA0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80182A84; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80182A84); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182AB4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182AB4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182AD0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182AD0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182CA0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182CA0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182D58[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182D58[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019D428; +extern u8 D_8019DDE0; +extern u8 D_8019DDE1; +extern u8 D_8019DDE2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019D428; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019DDE0 = mul * (local.b[0] >> 4); + D_8019DDE1 = mul * (local.b[1] >> 4); + D_8019DDE2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80182AA8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80182AA8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80182AC4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80182AC4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80182C90[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80182C90[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80182CB0[]; +extern unsigned char D_80182D10[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182CB0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80182D10); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019D424; +extern u8 D_8019DDE0; +extern u8 D_8019DDE4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019D424, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019DDE0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019DDE0, 0x10); + memcpy(&D_8019DDE4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80182E68[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80182E68[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80182F90[])(void); + +void func_80143B30(void *a0) { + D_80182F90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80182F9C[])(void); + +void func_80143C38(void *a0) { + D_80182F9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80182FA4[])(void); + +void func_80143C98(void *a0) { + D_80182FA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80143D28); + + +extern void (*D_80182FEC[])(void); + +void func_80143E68(void *a0) { + D_80182FEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183000[])(void); + +void func_80144054(void *a0) { + D_80183000[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183008[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183008[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182F84; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80182F84, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80182F98; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182F98 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182F98 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80182FAC; +extern u8 D_80182FB8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182FAC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182FB8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80182F84; +extern u8 D_80182FF4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80182F84, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80182FF4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183010[])(void); + +void func_801449C8(void *a0) { + D_80183010[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183018[])(void); + +void func_80144A2C(void *a0) { + D_80183018[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80140608", func_80144B14); + + + diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c b/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c index f66c8f79e..96f6b259b 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80183498; -extern u8 *D_8018349C; -extern u8 *D_801834A0; -extern u8 *D_801834A4; -extern u8 *D_801834A8; -extern u16 *D_801834AC[]; -extern u16 *D_801834B4[]; -extern u16 *D_801834D4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183498; - iVar2 = func_80028D58(); - puVar3 = D_801834AC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018349C; - iVar2 = func_80028DE0(); - puVar3 = D_801834AC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801834A0 + 0x18) = *D_801834B4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801834A4 + 0x18) = *D_801834B4[iVar2]; - - puVar1 = D_801834A8; - iVar2 = func_80028D9C(); - puVar3 = D_801834D4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801833D4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801833D4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801833E4; -extern char *D_80183404; -extern char *D_80183408; -extern char *D_8018340C; -extern char *D_80183410; -extern char *D_80183414; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801833E4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183404; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183408; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018340C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183410; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183414; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018329E; -extern unsigned short D_801832A2; -extern unsigned short D_801832A6; -extern unsigned short D_801832AA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018329E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801832A2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801832A6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801832AA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183834[])(void); - -void func_80141788(void) -{ - D_80183834[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183840[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183840[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801837B8; -extern s16 D_801837BA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80183458; - extern u8 D_80183470; - extern u8 D_801834E4; - extern u8 D_801834EC; - extern void *D_801B0A40; - extern void *D_801B0A44; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B0A40 = &D_80183458; - D_801B0A44 = &D_801834E4; - } else { - D_801B0A40 = &D_80183470; - D_801B0A44 = &D_801834EC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801837B8 = 0xE; - D_801837BA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801837BC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801837BC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801837BC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80183794; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80183794 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183864[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183864[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80183874[])(void); - -void func_801425CC(void *a0) { - D_80183874[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183858; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183858); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183888[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183888[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801838A4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801838A4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183A74[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183A74[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183B2C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183B2C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B0110; -extern u8 D_801B0A48; -extern u8 D_801B0A49; -extern u8 D_801B0A4A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B0110; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B0A48 = mul * (local.b[0] >> 4); - D_801B0A49 = mul * (local.b[1] >> 4); - D_801B0A4A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018387C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018387C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183898[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183898); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183A64[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183A64[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183A84[]; -extern unsigned char D_80183AE4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183A84); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183AE4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B010C; -extern u8 D_801B0A48; -extern u8 D_801B0A4C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B010C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B0A48); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B0A48, 0x10); - memcpy(&D_801B0A4C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183C3C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183C3C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183D64[])(void); - -void func_80143B30(void *a0) { - D_80183D64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183D70[])(void); - -void func_80143C38(void *a0) { - D_80183D70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183D78[])(void); - -void func_80143C98(void *a0) { - D_80183D78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183DC0[])(void); - -void func_80143E68(void *a0) { - D_80183DC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183DD4[])(void); - -void func_80144054(void *a0) { - D_80183DD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183DDC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183DDC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183D58; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183D58, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183D6C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183D6C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183D6C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183D80; -extern u8 D_80183D8C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183D80); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183D8C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183D58; -extern u8 D_80183DC8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183D58, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183DC8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183DE4[])(void); - -void func_801449C8(void *a0) { - D_80183DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183DEC[])(void); - -void func_80144A2C(void *a0) { - D_80183DEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_005/ov_SC05_005_jr_80140608.c b/src/ov_SC05_005/ov_SC05_005_jr_80140608.c new file mode 100644 index 000000000..0686de77b --- /dev/null +++ b/src/ov_SC05_005/ov_SC05_005_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AF780; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801826D8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B08FC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B1FC0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AF780; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182414)(); +extern s16 (*D_80182418)(); +extern M2C_UNK (*D_80182420)(); +extern s32 (*D_80182424)(); +extern s32 D_801B08F8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AF784; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018276C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185C50; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80182784; +extern M2C_UNK D_8018278C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80182794; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801827B0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801827BC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801827D0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182820[]; +extern s16 D_80182850[]; +extern s16 D_801828B0[]; +extern s16 D_801828B8[]; +extern s16 D_801828D8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182910[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182968[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801829B0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801829B8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801829C0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801829C8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182970; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182990; +extern void func_801321B0(int param_1); +extern int D_801829A0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B0968; +extern s32 D_801B096C[]; +extern int D_801B0970; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801829D4; +extern u8 D_801829D0; +extern s16 *D_801829D8; +extern u8 D_801829DC; +extern int D_801B0968; +extern u16 D_801B0978; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801829D8; /* holds a pointer value (*(u16**)&D_801829D8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801829EC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182A40; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182A44[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80182A88; +extern u8 D_80182ACC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182B10[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182B88, D_80182B8A, D_80182B8C, D_80182B8E, D_80182B90, D_80182B92; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B09E0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B09E4; +extern s8 D_801B09E5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B0A04; +extern s32 D_801B09F8; +extern s32 D_801B09FC; +extern s32 D_801B0A08; +extern void func_8013CABC(void); +extern s32 D_801B0A00; +extern void func_8013CAE8(void); +extern s32 D_801B0A30; +extern s32 D_801B0A34; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B0A10; +extern s32 D_801B0A14; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B1FBA; +extern u8 D_801B202E; +extern u8 D_801B1EE2; +extern u8 D_801B1F9C; +extern u8 D_801B1EC0; +extern u8 D_801B1EE1; +extern s32 D_801B1FA0; +extern void func_8013D330(void); +extern void *D_801B09E8; +extern void *D_801B09EC; +extern void *D_801B09F0; +extern s32 D_801B0A18; +extern s32 D_801B0A1C; +extern s32 D_801B0A20; +extern s32 D_801B1F14[]; +extern u8 D_80182C80[]; +extern u8 D_80182D28[]; +extern u8 D_80182BD8[]; +extern u8 D_80182CD4[]; +extern u8 D_80182D54[]; +extern u8 D_80182C2C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B09F4; +extern s32 D_801B0A24; +extern s32 D_801B0A28; +extern s32 D_801B0A2C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B0A0C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801837E0; +extern s32 D_80115188; +extern s16 D_801837B8; +extern s16 D_801837BA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801837BC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80183498; +extern u8 *D_8018349C; +extern u8 *D_801834A0; +extern u8 *D_801834A4; +extern u8 *D_801834A8; +extern u16 *D_801834AC[]; +extern u16 *D_801834B4[]; +extern u16 *D_801834D4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183498; + iVar2 = func_80028D58(); + puVar3 = D_801834AC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018349C; + iVar2 = func_80028DE0(); + puVar3 = D_801834AC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801834A0 + 0x18) = *D_801834B4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801834A4 + 0x18) = *D_801834B4[iVar2]; + + puVar1 = D_801834A8; + iVar2 = func_80028D9C(); + puVar3 = D_801834D4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801833D4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801833D4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801833E4; +extern char *D_80183404; +extern char *D_80183408; +extern char *D_8018340C; +extern char *D_80183410; +extern char *D_80183414; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801833E4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183404; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183408; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018340C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183410; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183414; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018329E; +extern unsigned short D_801832A2; +extern unsigned short D_801832A6; +extern unsigned short D_801832AA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018329E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801832A2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801832A6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801832AA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183834[])(void); + +void func_80141788(void) +{ + D_80183834[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183840[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183840[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801837B8; +extern s16 D_801837BA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80183458; + extern u8 D_80183470; + extern u8 D_801834E4; + extern u8 D_801834EC; + extern void *D_801B0A40; + extern void *D_801B0A44; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B0A40 = &D_80183458; + D_801B0A44 = &D_801834E4; + } else { + D_801B0A40 = &D_80183470; + D_801B0A44 = &D_801834EC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801837B8 = 0xE; + D_801837BA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801837BC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801837BC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801837BC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80183794; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80183794 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183864[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183864[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80183874[])(void); + +void func_801425CC(void *a0) { + D_80183874[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183858; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183858); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183888[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183888[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801838A4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801838A4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183A74[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183A74[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183B2C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183B2C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B0110; +extern u8 D_801B0A48; +extern u8 D_801B0A49; +extern u8 D_801B0A4A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B0110; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B0A48 = mul * (local.b[0] >> 4); + D_801B0A49 = mul * (local.b[1] >> 4); + D_801B0A4A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018387C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018387C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183898[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183898); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183A64[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183A64[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183A84[]; +extern unsigned char D_80183AE4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183A84); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183AE4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B010C; +extern u8 D_801B0A48; +extern u8 D_801B0A4C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B010C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B0A48); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B0A48, 0x10); + memcpy(&D_801B0A4C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183C3C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183C3C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183D64[])(void); + +void func_80143B30(void *a0) { + D_80183D64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183D70[])(void); + +void func_80143C38(void *a0) { + D_80183D70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183D78[])(void); + +void func_80143C98(void *a0) { + D_80183D78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80143D28); + + +extern void (*D_80183DC0[])(void); + +void func_80143E68(void *a0) { + D_80183DC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183DD4[])(void); + +void func_80144054(void *a0) { + D_80183DD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183DDC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183DDC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183D58; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183D58, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183D6C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183D6C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183D6C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183D80; +extern u8 D_80183D8C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183D80); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183D8C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183D58; +extern u8 D_80183DC8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183D58, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183DC8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183DE4[])(void); + +void func_801449C8(void *a0) { + D_80183DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183DEC[])(void); + +void func_80144A2C(void *a0) { + D_80183DEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c b/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c index f40841887..2fd51c1df 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801804B8; -extern u8 *D_801804BC; -extern u8 *D_801804C0; -extern u8 *D_801804C4; -extern u8 *D_801804C8; -extern u16 *D_801804CC[]; -extern u16 *D_801804D4[]; -extern u16 *D_801804F4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801804B8; - iVar2 = func_80028D58(); - puVar3 = D_801804CC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801804BC; - iVar2 = func_80028DE0(); - puVar3 = D_801804CC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801804C0 + 0x18) = *D_801804D4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801804C4 + 0x18) = *D_801804D4[iVar2]; - - puVar1 = D_801804C8; - iVar2 = func_80028D9C(); - puVar3 = D_801804F4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801803F4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801803F4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180404; -extern char *D_80180424; -extern char *D_80180428; -extern char *D_8018042C; -extern char *D_80180430; -extern char *D_80180434; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180404); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180424; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180428; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018042C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180430; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180434; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801802BE; -extern unsigned short D_801802C2; -extern unsigned short D_801802C6; -extern unsigned short D_801802CA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801802BE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801802C2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801802C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801802CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80180854[])(void); - -void func_80141788(void) -{ - D_80180854[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180860[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180860[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801807D8; -extern s16 D_801807DA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180478; - extern u8 D_80180490; - extern u8 D_80180504; - extern u8 D_8018050C; - extern void *D_8018EB78; - extern void *D_8018EB7C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018EB78 = &D_80180478; - D_8018EB7C = &D_80180504; - } else { - D_8018EB78 = &D_80180490; - D_8018EB7C = &D_8018050C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801807D8 = 0xE; - D_801807DA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801807DC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801807DC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801807DC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801807B4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801807B4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80180884[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80180884[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80180894[])(void); - -void func_801425CC(void *a0) { - D_80180894[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180878; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180878); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801808A8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801808A8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801808C4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801808C4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180A94[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180A94[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180B4C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180B4C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018E260; -extern u8 D_8018EB80; -extern u8 D_8018EB81; -extern u8 D_8018EB82; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018E260; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018EB80 = mul * (local.b[0] >> 4); - D_8018EB81 = mul * (local.b[1] >> 4); - D_8018EB82 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018089C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018089C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801808B8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801808B8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80180A84[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80180A84[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180AA4[]; -extern unsigned char D_80180B04[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180AA4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80180B04); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018E25C; -extern u8 D_8018EB80; -extern u8 D_8018EB84; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018E25C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018EB80); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018EB80, 0x10); - memcpy(&D_8018EB84, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180C5C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180C5C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180D84[])(void); - -void func_80143B30(void *a0) { - D_80180D84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180D90[])(void); - -void func_80143C38(void *a0) { - D_80180D90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180D98[])(void); - -void func_80143C98(void *a0) { - D_80180D98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180DE0[])(void); - -void func_80143E68(void *a0) { - D_80180DE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180DF4[])(void); - -void func_80144054(void *a0) { - D_80180DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180DFC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180DFC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180D78; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180D78, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180D8C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180D8C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180D8C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180DA0; -extern u8 D_80180DAC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180DA0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180DAC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180D78; -extern u8 D_80180DE8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180D78, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180DE8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180E04[])(void); - -void func_801449C8(void *a0) { - D_80180E04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180E0C[])(void); - -void func_80144A2C(void *a0) { - D_80180E0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_006/ov_SC05_006_jr_80140608.c b/src/ov_SC05_006/ov_SC05_006_jr_80140608.c new file mode 100644 index 000000000..f5360389c --- /dev/null +++ b/src/ov_SC05_006/ov_SC05_006_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018D8D0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F6F8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018EA34; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801900F0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018D8D0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F434)(); +extern s16 (*D_8017F438)(); +extern M2C_UNK (*D_8017F440)(); +extern s32 (*D_8017F444)(); +extern s32 D_8018EA30; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D8D4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F78C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182C70; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F7A4; +extern M2C_UNK D_8017F7AC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F7B4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F7D0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F7DC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F7F0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F840[]; +extern s16 D_8017F870[]; +extern s16 D_8017F8D0[]; +extern s16 D_8017F8D8[]; +extern s16 D_8017F8F8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F930[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F988[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F9D0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F9D8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F9E0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F9E8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F990; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F9B0; +extern void func_801321B0(int param_1); +extern int D_8017F9C0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018EAA0; +extern s32 D_8018EAA4[]; +extern int D_8018EAA8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F9F4; +extern u8 D_8017F9F0; +extern s16 *D_8017F9F8; +extern u8 D_8017F9FC; +extern int D_8018EAA0; +extern u16 D_8018EAB0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F9F8; /* holds a pointer value (*(u16**)&D_8017F9F8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017FA0C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017FA60; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017FA64[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017FAA8; +extern u8 D_8017FAEC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017FB30[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017FBA8, D_8017FBAA, D_8017FBAC, D_8017FBAE, D_8017FBB0, D_8017FBB2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018EB18; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018EB1C; +extern s8 D_8018EB1D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018EB3C; +extern s32 D_8018EB30; +extern s32 D_8018EB34; +extern s32 D_8018EB40; +extern void func_8013CABC(void); +extern s32 D_8018EB38; +extern void func_8013CAE8(void); +extern s32 D_8018EB68; +extern s32 D_8018EB6C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018EB48; +extern s32 D_8018EB4C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801900EA; +extern u8 D_8019015E; +extern u8 D_80190012; +extern u8 D_801900CC; +extern u8 D_8018FFF0; +extern u8 D_80190011; +extern s32 D_801900D0; +extern void func_8013D330(void); +extern void *D_8018EB20; +extern void *D_8018EB24; +extern void *D_8018EB28; +extern s32 D_8018EB50; +extern s32 D_8018EB54; +extern s32 D_8018EB58; +extern s32 D_80190044[]; +extern u8 D_8017FCA0[]; +extern u8 D_8017FD48[]; +extern u8 D_8017FBF8[]; +extern u8 D_8017FCF4[]; +extern u8 D_8017FD74[]; +extern u8 D_8017FC4C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018EB2C; +extern s32 D_8018EB5C; +extern s32 D_8018EB60; +extern s32 D_8018EB64; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018EB44; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180800; +extern s32 D_80115188; +extern s16 D_801807D8; +extern s16 D_801807DA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801807DC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801804B8; +extern u8 *D_801804BC; +extern u8 *D_801804C0; +extern u8 *D_801804C4; +extern u8 *D_801804C8; +extern u16 *D_801804CC[]; +extern u16 *D_801804D4[]; +extern u16 *D_801804F4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801804B8; + iVar2 = func_80028D58(); + puVar3 = D_801804CC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801804BC; + iVar2 = func_80028DE0(); + puVar3 = D_801804CC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801804C0 + 0x18) = *D_801804D4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801804C4 + 0x18) = *D_801804D4[iVar2]; + + puVar1 = D_801804C8; + iVar2 = func_80028D9C(); + puVar3 = D_801804F4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801803F4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801803F4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180404; +extern char *D_80180424; +extern char *D_80180428; +extern char *D_8018042C; +extern char *D_80180430; +extern char *D_80180434; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180404); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180424; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180428; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018042C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180430; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180434; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801802BE; +extern unsigned short D_801802C2; +extern unsigned short D_801802C6; +extern unsigned short D_801802CA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801802BE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801802C2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801802C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801802CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80180854[])(void); + +void func_80141788(void) +{ + D_80180854[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180860[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180860[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801807D8; +extern s16 D_801807DA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180478; + extern u8 D_80180490; + extern u8 D_80180504; + extern u8 D_8018050C; + extern void *D_8018EB78; + extern void *D_8018EB7C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018EB78 = &D_80180478; + D_8018EB7C = &D_80180504; + } else { + D_8018EB78 = &D_80180490; + D_8018EB7C = &D_8018050C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801807D8 = 0xE; + D_801807DA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801807DC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801807DC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801807DC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801807B4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801807B4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80180884[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80180884[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80180894[])(void); + +void func_801425CC(void *a0) { + D_80180894[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180878; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180878); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801808A8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801808A8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801808C4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801808C4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180A94[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180A94[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180B4C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180B4C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018E260; +extern u8 D_8018EB80; +extern u8 D_8018EB81; +extern u8 D_8018EB82; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018E260; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018EB80 = mul * (local.b[0] >> 4); + D_8018EB81 = mul * (local.b[1] >> 4); + D_8018EB82 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018089C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018089C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801808B8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801808B8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80180A84[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80180A84[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180AA4[]; +extern unsigned char D_80180B04[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180AA4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80180B04); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018E25C; +extern u8 D_8018EB80; +extern u8 D_8018EB84; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018E25C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018EB80); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018EB80, 0x10); + memcpy(&D_8018EB84, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180C5C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180C5C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180D84[])(void); + +void func_80143B30(void *a0) { + D_80180D84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180D90[])(void); + +void func_80143C38(void *a0) { + D_80180D90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180D98[])(void); + +void func_80143C98(void *a0) { + D_80180D98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80143D28); + + +extern void (*D_80180DE0[])(void); + +void func_80143E68(void *a0) { + D_80180DE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180DF4[])(void); + +void func_80144054(void *a0) { + D_80180DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180DFC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180DFC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180D78; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180D78, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180D8C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180D8C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180D8C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180DA0; +extern u8 D_80180DAC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180DA0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180DAC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180D78; +extern u8 D_80180DE8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180D78, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180DE8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180E04[])(void); + +void func_801449C8(void *a0) { + D_80180E04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180E0C[])(void); + +void func_80144A2C(void *a0) { + D_80180E0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c b/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c index 5738d75b3..044eadef8 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80181AB4; -extern u8 *D_80181AB8; -extern u8 *D_80181ABC; -extern u8 *D_80181AC0; -extern u8 *D_80181AC4; -extern u16 *D_80181AC8[]; -extern u16 *D_80181AD0[]; -extern u16 *D_80181AF0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80181AB4; - iVar2 = func_80028D58(); - puVar3 = D_80181AC8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80181AB8; - iVar2 = func_80028DE0(); - puVar3 = D_80181AC8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80181ABC + 0x18) = *D_80181AD0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80181AC0 + 0x18) = *D_80181AD0[iVar2]; - - puVar1 = D_80181AC4; - iVar2 = func_80028D9C(); - puVar3 = D_80181AF0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801819F0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801819F0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80181A00; -extern char *D_80181A20; -extern char *D_80181A24; -extern char *D_80181A28; -extern char *D_80181A2C; -extern char *D_80181A30; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80181A00); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80181A20; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A24; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A28; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A2C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181A30; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801818BA; -extern unsigned short D_801818BE; -extern unsigned short D_801818C2; -extern unsigned short D_801818C6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801818BA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801818BE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801818C2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801818C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80181E50[])(void); - -void func_80141788(void) -{ - D_80181E50[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80181E5C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80181E5C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80181DD4; -extern s16 D_80181DD6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181A74; - extern u8 D_80181A8C; - extern u8 D_80181B00; - extern u8 D_80181B08; - extern void *D_8019BB58; - extern void *D_8019BB5C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019BB58 = &D_80181A74; - D_8019BB5C = &D_80181B00; - } else { - D_8019BB58 = &D_80181A8C; - D_8019BB5C = &D_80181B08; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80181DD4 = 0xE; - D_80181DD6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80181DD8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80181DD8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80181DD8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80181DB0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80181DB0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80181E80[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80181E80[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80181E90[])(void); - -void func_801425CC(void *a0) { - D_80181E90[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80181E74; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80181E74); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181EA4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181EA4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181EC0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181EC0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182090[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182090[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182148[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182148[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019B238; -extern u8 D_8019BB60; -extern u8 D_8019BB61; -extern u8 D_8019BB62; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019B238; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019BB60 = mul * (local.b[0] >> 4); - D_8019BB61 = mul * (local.b[1] >> 4); - D_8019BB62 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80181E98; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181E98); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181EB4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181EB4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80182080[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80182080[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801820A0[]; -extern unsigned char D_80182100[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801820A0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80182100); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019B234; -extern u8 D_8019BB60; -extern u8 D_8019BB64; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019B234, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019BB60); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019BB60, 0x10); - memcpy(&D_8019BB64, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80182258[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80182258[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80182380[])(void); - -void func_80143B30(void *a0) { - D_80182380[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018238C[])(void); - -void func_80143C38(void *a0) { - D_8018238C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80182394[])(void); - -void func_80143C98(void *a0) { - D_80182394[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80143D28); - - -extern void (*D_801823DC[])(void); - -void func_80143E68(void *a0) { - D_801823DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801823F0[])(void); - -void func_80144054(void *a0) { - D_801823F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801823F8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801823F8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80182374; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80182374, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80182388; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182388 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182388 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018239C; -extern u8 D_801823A8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018239C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801823A8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80182374; -extern u8 D_801823E4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80182374, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801823E4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80182400[])(void); - -void func_801449C8(void *a0) { - D_80182400[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80182408[])(void); - -void func_80144A2C(void *a0) { - D_80182408[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_007/ov_SC05_007_jr_80140608.c b/src/ov_SC05_007/ov_SC05_007_jr_80140608.c new file mode 100644 index 000000000..c0b5deaa3 --- /dev/null +++ b/src/ov_SC05_007/ov_SC05_007_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019A8A8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80180CF4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019BA14; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019CE90; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019A8A8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80180A30)(); +extern s16 (*D_80180A34)(); +extern M2C_UNK (*D_80180A3C)(); +extern s32 (*D_80180A40)(); +extern s32 D_8019BA10; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019A8AC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80180D88; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018426C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80180DA0; +extern M2C_UNK D_80180DA8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80180DB0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80180DCC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80180DD8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80180DEC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80180E3C[]; +extern s16 D_80180E6C[]; +extern s16 D_80180ECC[]; +extern s16 D_80180ED4[]; +extern s16 D_80180EF4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80180F2C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80180F84[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80180FCC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80180FD4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80180FDC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80180FE4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80180F8C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80180FAC; +extern void func_801321B0(int param_1); +extern int D_80180FBC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019BA80; +extern s32 D_8019BA84[]; +extern int D_8019BA88; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80180FF0; +extern u8 D_80180FEC; +extern s16 *D_80180FF4; +extern u8 D_80180FF8; +extern int D_8019BA80; +extern u16 D_8019BA90; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80180FF4; /* holds a pointer value (*(u16**)&D_80180FF4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80181008[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018105C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80181060[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801810A4; +extern u8 D_801810E8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018112C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801811A4, D_801811A6, D_801811A8, D_801811AA, D_801811AC, D_801811AE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019BAF8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019BAFC; +extern s8 D_8019BAFD; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019BB1C; +extern s32 D_8019BB10; +extern s32 D_8019BB14; +extern s32 D_8019BB20; +extern void func_8013CABC(void); +extern s32 D_8019BB18; +extern void func_8013CAE8(void); +extern s32 D_8019BB48; +extern s32 D_8019BB4C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019BB28; +extern s32 D_8019BB2C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019CE8A; +extern u8 D_8019CEFE; +extern u8 D_8019CDB2; +extern u8 D_8019CE6C; +extern u8 D_8019CD90; +extern u8 D_8019CDB1; +extern s32 D_8019CE70; +extern void func_8013D330(void); +extern void *D_8019BB00; +extern void *D_8019BB04; +extern void *D_8019BB08; +extern s32 D_8019BB30; +extern s32 D_8019BB34; +extern s32 D_8019BB38; +extern s32 D_8019CDE4[]; +extern u8 D_8018129C[]; +extern u8 D_80181344[]; +extern u8 D_801811F4[]; +extern u8 D_801812F0[]; +extern u8 D_80181370[]; +extern u8 D_80181248[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019BB0C; +extern s32 D_8019BB3C; +extern s32 D_8019BB40; +extern s32 D_8019BB44; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019BB24; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80181DFC; +extern s32 D_80115188; +extern s16 D_80181DD4; +extern s16 D_80181DD6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80181DD8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80181AB4; +extern u8 *D_80181AB8; +extern u8 *D_80181ABC; +extern u8 *D_80181AC0; +extern u8 *D_80181AC4; +extern u16 *D_80181AC8[]; +extern u16 *D_80181AD0[]; +extern u16 *D_80181AF0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80181AB4; + iVar2 = func_80028D58(); + puVar3 = D_80181AC8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80181AB8; + iVar2 = func_80028DE0(); + puVar3 = D_80181AC8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80181ABC + 0x18) = *D_80181AD0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80181AC0 + 0x18) = *D_80181AD0[iVar2]; + + puVar1 = D_80181AC4; + iVar2 = func_80028D9C(); + puVar3 = D_80181AF0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801819F0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801819F0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80181A00; +extern char *D_80181A20; +extern char *D_80181A24; +extern char *D_80181A28; +extern char *D_80181A2C; +extern char *D_80181A30; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80181A00); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80181A20; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A24; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A28; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A2C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181A30; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801818BA; +extern unsigned short D_801818BE; +extern unsigned short D_801818C2; +extern unsigned short D_801818C6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801818BA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801818BE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801818C2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801818C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80181E50[])(void); + +void func_80141788(void) +{ + D_80181E50[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80181E5C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80181E5C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80181DD4; +extern s16 D_80181DD6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181A74; + extern u8 D_80181A8C; + extern u8 D_80181B00; + extern u8 D_80181B08; + extern void *D_8019BB58; + extern void *D_8019BB5C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019BB58 = &D_80181A74; + D_8019BB5C = &D_80181B00; + } else { + D_8019BB58 = &D_80181A8C; + D_8019BB5C = &D_80181B08; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80181DD4 = 0xE; + D_80181DD6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80181DD8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80181DD8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80181DD8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80181DB0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80181DB0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80181E80[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80181E80[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80181E90[])(void); + +void func_801425CC(void *a0) { + D_80181E90[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80181E74; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80181E74); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181EA4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181EA4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181EC0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181EC0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182090[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182090[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182148[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182148[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019B238; +extern u8 D_8019BB60; +extern u8 D_8019BB61; +extern u8 D_8019BB62; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019B238; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019BB60 = mul * (local.b[0] >> 4); + D_8019BB61 = mul * (local.b[1] >> 4); + D_8019BB62 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80181E98; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80181E98); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181EB4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181EB4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80182080[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80182080[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801820A0[]; +extern unsigned char D_80182100[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801820A0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80182100); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019B234; +extern u8 D_8019BB60; +extern u8 D_8019BB64; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019B234, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019BB60); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019BB60, 0x10); + memcpy(&D_8019BB64, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80182258[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80182258[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80182380[])(void); + +void func_80143B30(void *a0) { + D_80182380[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018238C[])(void); + +void func_80143C38(void *a0) { + D_8018238C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80182394[])(void); + +void func_80143C98(void *a0) { + D_80182394[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80143D28); + + +extern void (*D_801823DC[])(void); + +void func_80143E68(void *a0) { + D_801823DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801823F0[])(void); + +void func_80144054(void *a0) { + D_801823F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801823F8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801823F8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182374; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80182374, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80182388; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182388 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182388 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018239C; +extern u8 D_801823A8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018239C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801823A8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80182374; +extern u8 D_801823E4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80182374, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801823E4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80182400[])(void); + +void func_801449C8(void *a0) { + D_80182400[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80182408[])(void); + +void func_80144A2C(void *a0) { + D_80182408[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c b/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c index b9c5c6bb5..c0728412f 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80183A0C; -extern u8 *D_80183A10; -extern u8 *D_80183A14; -extern u8 *D_80183A18; -extern u8 *D_80183A1C; -extern u16 *D_80183A20[]; -extern u16 *D_80183A28[]; -extern u16 *D_80183A48[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183A0C; - iVar2 = func_80028D58(); - puVar3 = D_80183A20[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80183A10; - iVar2 = func_80028DE0(); - puVar3 = D_80183A20[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80183A14 + 0x18) = *D_80183A28[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80183A18 + 0x18) = *D_80183A28[iVar2]; - - puVar1 = D_80183A1C; - iVar2 = func_80028D9C(); - puVar3 = D_80183A48[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183948; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183948); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183958; -extern char *D_80183978; -extern char *D_8018397C; -extern char *D_80183980; -extern char *D_80183984; -extern char *D_80183988; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183958); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183978; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018397C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183980; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183984; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183988; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80183812; -extern unsigned short D_80183816; -extern unsigned short D_8018381A; -extern unsigned short D_8018381E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80183812; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80183816; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018381A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018381E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183DA8[])(void); - -void func_80141788(void) -{ - D_80183DA8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183DB4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183DB4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80183D2C; -extern s16 D_80183D2E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801839CC; - extern u8 D_801839E4; - extern u8 D_80183A58; - extern u8 D_80183A60; - extern void *D_8019FE88; - extern void *D_8019FE8C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019FE88 = &D_801839CC; - D_8019FE8C = &D_80183A58; - } else { - D_8019FE88 = &D_801839E4; - D_8019FE8C = &D_80183A60; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183D2C = 0xE; - D_80183D2E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80183D30: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80183D30; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80183D30); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80183D08; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80183D08 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183DD8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183DD8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80183DE8[])(void); - -void func_801425CC(void *a0) { - D_80183DE8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183DCC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183DCC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183DFC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183DFC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183E18[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183E18[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183FE8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183FE8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801840A0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801840A0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019F56C; -extern u8 D_8019FE90; -extern u8 D_8019FE91; -extern u8 D_8019FE92; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019F56C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019FE90 = mul * (local.b[0] >> 4); - D_8019FE91 = mul * (local.b[1] >> 4); - D_8019FE92 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80183DF0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183DF0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183E0C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183E0C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183FD8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183FD8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183FF8[]; -extern unsigned char D_80184058[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183FF8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80184058); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019F568; -extern u8 D_8019FE90; -extern u8 D_8019FE94; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019F568, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019FE90); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019FE90, 0x10); - memcpy(&D_8019FE94, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801841B0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801841B0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801842D8[])(void); - -void func_80143B30(void *a0) { - D_801842D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801842E4[])(void); - -void func_80143C38(void *a0) { - D_801842E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801842EC[])(void); - -void func_80143C98(void *a0) { - D_801842EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80143D28); - - -extern void (*D_80184334[])(void); - -void func_80143E68(void *a0) { - D_80184334[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80184348[])(void); - -void func_80144054(void *a0) { - D_80184348[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184350[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184350[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801842CC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801842CC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801842E0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801842E0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801842E0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801842F4; -extern u8 D_80184300; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801842F4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184300); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801842CC; -extern u8 D_8018433C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801842CC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018433C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80184358[])(void); - -void func_801449C8(void *a0) { - D_80184358[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184360[])(void); - -void func_80144A2C(void *a0) { - D_80184360[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_008/ov_SC05_008_jr_80140608.c b/src/ov_SC05_008/ov_SC05_008_jr_80140608.c new file mode 100644 index 000000000..84c649cd2 --- /dev/null +++ b/src/ov_SC05_008/ov_SC05_008_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019EBDC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182C4C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019FD44; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A1278; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019EBDC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182988)(); +extern s16 (*D_8018298C)(); +extern M2C_UNK (*D_80182994)(); +extern s32 (*D_80182998)(); +extern s32 D_8019FD40; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019EBE0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80182CE0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801861C4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80182CF8; +extern M2C_UNK D_80182D00; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80182D08; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80182D24[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80182D30[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80182D44[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182D94[]; +extern s16 D_80182DC4[]; +extern s16 D_80182E24[]; +extern s16 D_80182E2C[]; +extern s16 D_80182E4C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182E84[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182EDC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80182F24[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182F2C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182F34[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182F3C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182EE4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182F04; +extern void func_801321B0(int param_1); +extern int D_80182F14; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019FDB0; +extern s32 D_8019FDB4[]; +extern int D_8019FDB8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182F48; +extern u8 D_80182F44; +extern s16 *D_80182F4C; +extern u8 D_80182F50; +extern int D_8019FDB0; +extern u16 D_8019FDC0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182F4C; /* holds a pointer value (*(u16**)&D_80182F4C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182F60[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182FB4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182FB8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80182FFC; +extern u8 D_80183040; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80183084[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801830FC, D_801830FE, D_80183100, D_80183102, D_80183104, D_80183106; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019FE28; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019FE2C; +extern s8 D_8019FE2D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019FE4C; +extern s32 D_8019FE40; +extern s32 D_8019FE44; +extern s32 D_8019FE50; +extern void func_8013CABC(void); +extern s32 D_8019FE48; +extern void func_8013CAE8(void); +extern s32 D_8019FE78; +extern s32 D_8019FE7C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019FE58; +extern s32 D_8019FE5C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A1272; +extern u8 D_801A12EA; +extern u8 D_801A119A; +extern u8 D_801A1254; +extern u8 D_801A1148; +extern u8 D_801A1199; +extern s32 D_801A1258; +extern void func_8013D330(void); +extern void *D_8019FE30; +extern void *D_8019FE34; +extern void *D_8019FE38; +extern s32 D_8019FE60; +extern s32 D_8019FE64; +extern s32 D_8019FE68; +extern s32 D_801A11CC[]; +extern u8 D_801831F4[]; +extern u8 D_8018329C[]; +extern u8 D_8018314C[]; +extern u8 D_80183248[]; +extern u8 D_801832C8[]; +extern u8 D_801831A0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019FE3C; +extern s32 D_8019FE6C; +extern s32 D_8019FE70; +extern s32 D_8019FE74; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019FE54; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183D54; +extern s32 D_80115188; +extern s16 D_80183D2C; +extern s16 D_80183D2E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80183D30; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80183A0C; +extern u8 *D_80183A10; +extern u8 *D_80183A14; +extern u8 *D_80183A18; +extern u8 *D_80183A1C; +extern u16 *D_80183A20[]; +extern u16 *D_80183A28[]; +extern u16 *D_80183A48[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183A0C; + iVar2 = func_80028D58(); + puVar3 = D_80183A20[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80183A10; + iVar2 = func_80028DE0(); + puVar3 = D_80183A20[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80183A14 + 0x18) = *D_80183A28[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80183A18 + 0x18) = *D_80183A28[iVar2]; + + puVar1 = D_80183A1C; + iVar2 = func_80028D9C(); + puVar3 = D_80183A48[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183948; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183948); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183958; +extern char *D_80183978; +extern char *D_8018397C; +extern char *D_80183980; +extern char *D_80183984; +extern char *D_80183988; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183958); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183978; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018397C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183980; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183984; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183988; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80183812; +extern unsigned short D_80183816; +extern unsigned short D_8018381A; +extern unsigned short D_8018381E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80183812; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80183816; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018381A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018381E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183DA8[])(void); + +void func_80141788(void) +{ + D_80183DA8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183DB4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183DB4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80183D2C; +extern s16 D_80183D2E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801839CC; + extern u8 D_801839E4; + extern u8 D_80183A58; + extern u8 D_80183A60; + extern void *D_8019FE88; + extern void *D_8019FE8C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019FE88 = &D_801839CC; + D_8019FE8C = &D_80183A58; + } else { + D_8019FE88 = &D_801839E4; + D_8019FE8C = &D_80183A60; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183D2C = 0xE; + D_80183D2E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80183D30: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80183D30; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80183D30); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80183D08; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80183D08 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183DD8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183DD8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80183DE8[])(void); + +void func_801425CC(void *a0) { + D_80183DE8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183DCC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183DCC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183DFC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183DFC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183E18[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183E18[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183FE8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183FE8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801840A0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801840A0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019F56C; +extern u8 D_8019FE90; +extern u8 D_8019FE91; +extern u8 D_8019FE92; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019F56C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019FE90 = mul * (local.b[0] >> 4); + D_8019FE91 = mul * (local.b[1] >> 4); + D_8019FE92 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80183DF0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183DF0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183E0C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183E0C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183FD8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183FD8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183FF8[]; +extern unsigned char D_80184058[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183FF8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80184058); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019F568; +extern u8 D_8019FE90; +extern u8 D_8019FE94; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019F568, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019FE90); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019FE90, 0x10); + memcpy(&D_8019FE94, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801841B0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801841B0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801842D8[])(void); + +void func_80143B30(void *a0) { + D_801842D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801842E4[])(void); + +void func_80143C38(void *a0) { + D_801842E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801842EC[])(void); + +void func_80143C98(void *a0) { + D_801842EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80143D28); + + +extern void (*D_80184334[])(void); + +void func_80143E68(void *a0) { + D_80184334[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80184348[])(void); + +void func_80144054(void *a0) { + D_80184348[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184350[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184350[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801842CC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801842CC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801842E0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801842E0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801842E0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801842F4; +extern u8 D_80184300; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801842F4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80184300); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801842CC; +extern u8 D_8018433C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801842CC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018433C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80184358[])(void); + +void func_801449C8(void *a0) { + D_80184358[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184360[])(void); + +void func_80144A2C(void *a0) { + D_80184360[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c b/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c index 5c9e4a5d4..8c12c8143 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FB1C; -extern u8 *D_8017FB20; -extern u8 *D_8017FB24; -extern u8 *D_8017FB28; -extern u8 *D_8017FB2C; -extern u16 *D_8017FB30[]; -extern u16 *D_8017FB38[]; -extern u16 *D_8017FB58[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FB1C; - iVar2 = func_80028D58(); - puVar3 = D_8017FB30[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FB20; - iVar2 = func_80028DE0(); - puVar3 = D_8017FB30[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FB24 + 0x18) = *D_8017FB38[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FB28 + 0x18) = *D_8017FB38[iVar2]; - - puVar1 = D_8017FB2C; - iVar2 = func_80028D9C(); - puVar3 = D_8017FB58[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017FA58; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017FA58); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017FA68; -extern char *D_8017FA88; -extern char *D_8017FA8C; -extern char *D_8017FA90; -extern char *D_8017FA94; -extern char *D_8017FA98; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017FA68); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FA88; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA8C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA90; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA94; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA98; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F922; -extern unsigned short D_8017F926; -extern unsigned short D_8017F92A; -extern unsigned short D_8017F92E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F922; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F926; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F92A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F92E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017FEB8[])(void); - -void func_80141788(void) -{ - D_8017FEB8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017FEC4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FEC4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017FE3C; -extern s16 D_8017FE3E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017FADC; - extern u8 D_8017FAF4; - extern u8 D_8017FB68; - extern u8 D_8017FB70; - extern void *D_80195898; - extern void *D_8019589C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80195898 = &D_8017FADC; - D_8019589C = &D_8017FB68; - } else { - D_80195898 = &D_8017FAF4; - D_8019589C = &D_8017FB70; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017FE3C = 0xE; - D_8017FE3E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017FE40: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017FE40; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017FE40); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017FE18; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017FE18 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FEE8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FEE8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017FEF8[])(void); - -void func_801425CC(void *a0) { - D_8017FEF8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FEDC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FEDC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FF0C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FF0C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FF28[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FF28[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801800F8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801800F8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801801B0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801801B0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80194F80; -extern u8 D_801958A0; -extern u8 D_801958A1; -extern u8 D_801958A2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80194F80; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801958A0 = mul * (local.b[0] >> 4); - D_801958A1 = mul * (local.b[1] >> 4); - D_801958A2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017FF00; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FF00); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FF1C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FF1C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801800E8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801800E8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180108[]; -extern unsigned char D_80180168[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180108); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80180168); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80194F7C; -extern u8 D_801958A0; -extern u8 D_801958A4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80194F7C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801958A0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801958A0, 0x10); - memcpy(&D_801958A4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801802C0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801802C0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801803E8[])(void); - -void func_80143B30(void *a0) { - D_801803E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801803F4[])(void); - -void func_80143C38(void *a0) { - D_801803F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801803FC[])(void); - -void func_80143C98(void *a0) { - D_801803FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180444[])(void); - -void func_80143E68(void *a0) { - D_80180444[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180458[])(void); - -void func_80144054(void *a0) { - D_80180458[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180460[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180460[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801803DC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801803DC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801803F0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801803F0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801803F0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180404; -extern u8 D_80180410; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180404); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180410); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801803DC; -extern u8 D_8018044C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801803DC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018044C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180468[])(void); - -void func_801449C8(void *a0) { - D_80180468[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180470[])(void); - -void func_80144A2C(void *a0) { - D_80180470[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_009/ov_SC05_009_jr_80140608.c b/src/ov_SC05_009/ov_SC05_009_jr_80140608.c new file mode 100644 index 000000000..129f7438e --- /dev/null +++ b/src/ov_SC05_009/ov_SC05_009_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801945F0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017ED5C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80195754; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80196BD8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801945F0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EA98)(); +extern s16 (*D_8017EA9C)(); +extern M2C_UNK (*D_8017EAA4)(); +extern s32 (*D_8017EAA8)(); +extern s32 D_80195750; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801945F4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017EDF0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801822D4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017EE08; +extern M2C_UNK D_8017EE10; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017EE18; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017EE34[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017EE40[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017EE54[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017EEA4[]; +extern s16 D_8017EED4[]; +extern s16 D_8017EF34[]; +extern s16 D_8017EF3C[]; +extern s16 D_8017EF5C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017EF94[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017EFEC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F034[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F03C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F044[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F04C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017EFF4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F014; +extern void func_801321B0(int param_1); +extern int D_8017F024; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801957C0; +extern s32 D_801957C4[]; +extern int D_801957C8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F058; +extern u8 D_8017F054; +extern s16 *D_8017F05C; +extern u8 D_8017F060; +extern int D_801957C0; +extern u16 D_801957D0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F05C; /* holds a pointer value (*(u16**)&D_8017F05C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F070[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F0C4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F0C8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F10C; +extern u8 D_8017F150; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F194[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F20C, D_8017F20E, D_8017F210, D_8017F212, D_8017F214, D_8017F216; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80195838; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019583C; +extern s8 D_8019583D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019585C; +extern s32 D_80195850; +extern s32 D_80195854; +extern s32 D_80195860; +extern void func_8013CABC(void); +extern s32 D_80195858; +extern void func_8013CAE8(void); +extern s32 D_80195888; +extern s32 D_8019588C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80195868; +extern s32 D_8019586C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_80196BD2; +extern u8 D_80196C46; +extern u8 D_80196AFA; +extern u8 D_80196BB4; +extern u8 D_80196AD8; +extern u8 D_80196AF9; +extern s32 D_80196BB8; +extern void func_8013D330(void); +extern void *D_80195840; +extern void *D_80195844; +extern void *D_80195848; +extern s32 D_80195870; +extern s32 D_80195874; +extern s32 D_80195878; +extern s32 D_80196B2C[]; +extern u8 D_8017F304[]; +extern u8 D_8017F3AC[]; +extern u8 D_8017F25C[]; +extern u8 D_8017F358[]; +extern u8 D_8017F3D8[]; +extern u8 D_8017F2B0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019584C; +extern s32 D_8019587C; +extern s32 D_80195880; +extern s32 D_80195884; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80195864; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017FE64; +extern s32 D_80115188; +extern s16 D_8017FE3C; +extern s16 D_8017FE3E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017FE40; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FB1C; +extern u8 *D_8017FB20; +extern u8 *D_8017FB24; +extern u8 *D_8017FB28; +extern u8 *D_8017FB2C; +extern u16 *D_8017FB30[]; +extern u16 *D_8017FB38[]; +extern u16 *D_8017FB58[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FB1C; + iVar2 = func_80028D58(); + puVar3 = D_8017FB30[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FB20; + iVar2 = func_80028DE0(); + puVar3 = D_8017FB30[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FB24 + 0x18) = *D_8017FB38[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FB28 + 0x18) = *D_8017FB38[iVar2]; + + puVar1 = D_8017FB2C; + iVar2 = func_80028D9C(); + puVar3 = D_8017FB58[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017FA58; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017FA58); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017FA68; +extern char *D_8017FA88; +extern char *D_8017FA8C; +extern char *D_8017FA90; +extern char *D_8017FA94; +extern char *D_8017FA98; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017FA68); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FA88; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA8C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA90; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA94; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA98; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F922; +extern unsigned short D_8017F926; +extern unsigned short D_8017F92A; +extern unsigned short D_8017F92E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F922; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F926; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F92A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F92E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017FEB8[])(void); + +void func_80141788(void) +{ + D_8017FEB8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017FEC4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FEC4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017FE3C; +extern s16 D_8017FE3E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017FADC; + extern u8 D_8017FAF4; + extern u8 D_8017FB68; + extern u8 D_8017FB70; + extern void *D_80195898; + extern void *D_8019589C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80195898 = &D_8017FADC; + D_8019589C = &D_8017FB68; + } else { + D_80195898 = &D_8017FAF4; + D_8019589C = &D_8017FB70; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017FE3C = 0xE; + D_8017FE3E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017FE40: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017FE40; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017FE40); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017FE18; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017FE18 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FEE8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FEE8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017FEF8[])(void); + +void func_801425CC(void *a0) { + D_8017FEF8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FEDC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FEDC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FF0C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FF0C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FF28[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FF28[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801800F8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801800F8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801801B0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801801B0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80194F80; +extern u8 D_801958A0; +extern u8 D_801958A1; +extern u8 D_801958A2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80194F80; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801958A0 = mul * (local.b[0] >> 4); + D_801958A1 = mul * (local.b[1] >> 4); + D_801958A2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017FF00; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FF00); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FF1C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FF1C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801800E8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801800E8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180108[]; +extern unsigned char D_80180168[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180108); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80180168); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80194F7C; +extern u8 D_801958A0; +extern u8 D_801958A4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80194F7C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801958A0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801958A0, 0x10); + memcpy(&D_801958A4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801802C0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801802C0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801803E8[])(void); + +void func_80143B30(void *a0) { + D_801803E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801803F4[])(void); + +void func_80143C38(void *a0) { + D_801803F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801803FC[])(void); + +void func_80143C98(void *a0) { + D_801803FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80143D28); + + +extern void (*D_80180444[])(void); + +void func_80143E68(void *a0) { + D_80180444[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180458[])(void); + +void func_80144054(void *a0) { + D_80180458[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180460[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180460[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801803DC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801803DC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801803F0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801803F0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801803F0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180404; +extern u8 D_80180410; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180404); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180410); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801803DC; +extern u8 D_8018044C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801803DC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018044C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180468[])(void); + +void func_801449C8(void *a0) { + D_80180468[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180470[])(void); + +void func_80144A2C(void *a0) { + D_80180470[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c b/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c index 87249cef2..bfe4dc67b 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801899F8; -extern u8 *D_801899FC; -extern u8 *D_80189A00; -extern u8 *D_80189A04; -extern u8 *D_80189A08; -extern u16 *D_80189A0C[]; -extern u16 *D_80189A14[]; -extern u16 *D_80189A34[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801899F8; - iVar2 = func_80028D58(); - puVar3 = D_80189A0C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801899FC; - iVar2 = func_80028DE0(); - puVar3 = D_80189A0C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80189A00 + 0x18) = *D_80189A14[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80189A04 + 0x18) = *D_80189A14[iVar2]; - - puVar1 = D_80189A08; - iVar2 = func_80028D9C(); - puVar3 = D_80189A34[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80189934; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80189934); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80189944; -extern char *D_80189964; -extern char *D_80189968; -extern char *D_8018996C; -extern char *D_80189970; -extern char *D_80189974; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80189944); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80189964; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80189968; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018996C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80189970; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80189974; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801897FE; -extern unsigned short D_80189802; -extern unsigned short D_80189806; -extern unsigned short D_8018980A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801897FE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80189802; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80189806; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018980A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80189D94[])(void); - -void func_80141788(void) -{ - D_80189D94[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80189DA0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80189DA0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80189D18; -extern s16 D_80189D1A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801899B8; - extern u8 D_801899D0; - extern u8 D_80189A44; - extern u8 D_80189A4C; - extern void *D_801C5CE8; - extern void *D_801C5CEC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C5CE8 = &D_801899B8; - D_801C5CEC = &D_80189A44; - } else { - D_801C5CE8 = &D_801899D0; - D_801C5CEC = &D_80189A4C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80189D18 = 0xE; - D_80189D1A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80189D1C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80189D1C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80189D1C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80189CF4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80189CF4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80189DC4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80189DC4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80189DD4[])(void); - -void func_801425CC(void *a0) { - D_80189DD4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80189DB8; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80189DB8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189DE8[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189DE8[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189E04[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189E04[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189FD4[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189FD4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018A08C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018A08C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801C51B4; -extern u8 D_801C5CF0; -extern u8 D_801C5CF1; -extern u8 D_801C5CF2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C51B4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C5CF0 = mul * (local.b[0] >> 4); - D_801C5CF1 = mul * (local.b[1] >> 4); - D_801C5CF2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80189DDC; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80189DDC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80189DF8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80189DF8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80189FC4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80189FC4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80189FE4[]; -extern unsigned char D_8018A044[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80189FE4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018A044); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801C51B0; -extern u8 D_801C5CF0; -extern u8 D_801C5CF4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C51B0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C5CF0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C5CF0, 0x10); - memcpy(&D_801C5CF4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018A19C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018A19C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018A2C4[])(void); - -void func_80143B30(void *a0) { - D_8018A2C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018A2D0[])(void); - -void func_80143C38(void *a0) { - D_8018A2D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018A2D8[])(void); - -void func_80143C98(void *a0) { - D_8018A2D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018A320[])(void); - -void func_80143E68(void *a0) { - D_8018A320[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018A334[])(void); - -void func_80144054(void *a0) { - D_8018A334[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018A33C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018A33C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018A2B8; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018A2B8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018A2CC; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018A2CC * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018A2CC * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018A2E0; -extern u8 D_8018A2EC; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018A2E0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018A2EC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018A2B8; -extern u8 D_8018A328; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018A2B8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018A328, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018A344[])(void); - -void func_801449C8(void *a0) { - D_8018A344[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018A34C[])(void); - -void func_80144A2C(void *a0) { - D_8018A34C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_010/ov_SC05_010_jr_80140608.c b/src/ov_SC05_010/ov_SC05_010_jr_80140608.c new file mode 100644 index 000000000..eebcd47b0 --- /dev/null +++ b/src/ov_SC05_010/ov_SC05_010_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801C4824; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80188C38[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801C5BA4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801C7FC0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801C4824; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80188974)(); +extern s16 (*D_80188978)(); +extern M2C_UNK (*D_80188980)(); +extern s32 (*D_80188984)(); +extern s32 D_801C5BA0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801C4828; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80188CCC; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018C1B0; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80188CE4; +extern M2C_UNK D_80188CEC; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80188CF4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80188D10[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80188D1C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80188D30[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80188D80[]; +extern s16 D_80188DB0[]; +extern s16 D_80188E10[]; +extern s16 D_80188E18[]; +extern s16 D_80188E38[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80188E70[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80188EC8[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80188F10[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80188F18[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80188F20[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80188F28[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80188ED0; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80188EF0; +extern void func_801321B0(int param_1); +extern int D_80188F00; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801C5C10; +extern s32 D_801C5C14[]; +extern int D_801C5C18; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80188F34; +extern u8 D_80188F30; +extern s16 *D_80188F38; +extern u8 D_80188F3C; +extern int D_801C5C10; +extern u16 D_801C5C20; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80188F38; /* holds a pointer value (*(u16**)&D_80188F38) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80188F4C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80188FA0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80188FA4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80188FE8; +extern u8 D_8018902C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80189070[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801890E8, D_801890EA, D_801890EC, D_801890EE, D_801890F0, D_801890F2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801C5C88; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801C5C8C; +extern s8 D_801C5C8D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801C5CAC; +extern s32 D_801C5CA0; +extern s32 D_801C5CA4; +extern s32 D_801C5CB0; +extern void func_8013CABC(void); +extern s32 D_801C5CA8; +extern void func_8013CAE8(void); +extern s32 D_801C5CD8; +extern s32 D_801C5CDC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801C5CB8; +extern s32 D_801C5CBC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801C7FBA; +extern u8 D_801C802E; +extern u8 D_801C7EE2; +extern u8 D_801C7F9C; +extern u8 D_801C7EC0; +extern u8 D_801C7EE1; +extern s32 D_801C7FA0; +extern void func_8013D330(void); +extern void *D_801C5C90; +extern void *D_801C5C94; +extern void *D_801C5C98; +extern s32 D_801C5CC0; +extern s32 D_801C5CC4; +extern s32 D_801C5CC8; +extern s32 D_801C7F14[]; +extern u8 D_801891E0[]; +extern u8 D_80189288[]; +extern u8 D_80189138[]; +extern u8 D_80189234[]; +extern u8 D_801892B4[]; +extern u8 D_8018918C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801C5C9C; +extern s32 D_801C5CCC; +extern s32 D_801C5CD0; +extern s32 D_801C5CD4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801C5CB4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80189D40; +extern s32 D_80115188; +extern s16 D_80189D18; +extern s16 D_80189D1A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80189D1C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801899F8; +extern u8 *D_801899FC; +extern u8 *D_80189A00; +extern u8 *D_80189A04; +extern u8 *D_80189A08; +extern u16 *D_80189A0C[]; +extern u16 *D_80189A14[]; +extern u16 *D_80189A34[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801899F8; + iVar2 = func_80028D58(); + puVar3 = D_80189A0C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801899FC; + iVar2 = func_80028DE0(); + puVar3 = D_80189A0C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80189A00 + 0x18) = *D_80189A14[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80189A04 + 0x18) = *D_80189A14[iVar2]; + + puVar1 = D_80189A08; + iVar2 = func_80028D9C(); + puVar3 = D_80189A34[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80189934; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80189934); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80189944; +extern char *D_80189964; +extern char *D_80189968; +extern char *D_8018996C; +extern char *D_80189970; +extern char *D_80189974; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80189944); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80189964; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80189968; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018996C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80189970; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80189974; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801897FE; +extern unsigned short D_80189802; +extern unsigned short D_80189806; +extern unsigned short D_8018980A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801897FE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80189802; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80189806; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018980A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80189D94[])(void); + +void func_80141788(void) +{ + D_80189D94[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80189DA0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80189DA0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80189D18; +extern s16 D_80189D1A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801899B8; + extern u8 D_801899D0; + extern u8 D_80189A44; + extern u8 D_80189A4C; + extern void *D_801C5CE8; + extern void *D_801C5CEC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C5CE8 = &D_801899B8; + D_801C5CEC = &D_80189A44; + } else { + D_801C5CE8 = &D_801899D0; + D_801C5CEC = &D_80189A4C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80189D18 = 0xE; + D_80189D1A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80189D1C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80189D1C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80189D1C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80189CF4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80189CF4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80189DC4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80189DC4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80189DD4[])(void); + +void func_801425CC(void *a0) { + D_80189DD4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80189DB8; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80189DB8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189DE8[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189DE8[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189E04[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189E04[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189FD4[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189FD4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018A08C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018A08C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801C51B4; +extern u8 D_801C5CF0; +extern u8 D_801C5CF1; +extern u8 D_801C5CF2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C51B4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C5CF0 = mul * (local.b[0] >> 4); + D_801C5CF1 = mul * (local.b[1] >> 4); + D_801C5CF2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80189DDC; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80189DDC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80189DF8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80189DF8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80189FC4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80189FC4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80189FE4[]; +extern unsigned char D_8018A044[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80189FE4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018A044); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801C51B0; +extern u8 D_801C5CF0; +extern u8 D_801C5CF4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C51B0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C5CF0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C5CF0, 0x10); + memcpy(&D_801C5CF4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018A19C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018A19C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018A2C4[])(void); + +void func_80143B30(void *a0) { + D_8018A2C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018A2D0[])(void); + +void func_80143C38(void *a0) { + D_8018A2D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018A2D8[])(void); + +void func_80143C98(void *a0) { + D_8018A2D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80143D28); + + +extern void (*D_8018A320[])(void); + +void func_80143E68(void *a0) { + D_8018A320[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018A334[])(void); + +void func_80144054(void *a0) { + D_8018A334[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018A33C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018A33C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018A2B8; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018A2B8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018A2CC; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018A2CC * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018A2CC * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018A2E0; +extern u8 D_8018A2EC; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018A2E0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018A2EC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018A2B8; +extern u8 D_8018A328; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018A2B8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018A328, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018A344[])(void); + +void func_801449C8(void *a0) { + D_8018A344[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018A34C[])(void); + +void func_80144A2C(void *a0) { + D_8018A34C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c b/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c index 090a532d1..51a4ce07b 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017ED70; -extern u8 *D_8017ED74; -extern u8 *D_8017ED78; -extern u8 *D_8017ED7C; -extern u8 *D_8017ED80; -extern u16 *D_8017ED84[]; -extern u16 *D_8017ED8C[]; -extern u16 *D_8017EDAC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017ED70; - iVar2 = func_80028D58(); - puVar3 = D_8017ED84[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017ED74; - iVar2 = func_80028DE0(); - puVar3 = D_8017ED84[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017ED78 + 0x18) = *D_8017ED8C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017ED7C + 0x18) = *D_8017ED8C[iVar2]; - - puVar1 = D_8017ED80; - iVar2 = func_80028D9C(); - puVar3 = D_8017EDAC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017ECAC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017ECAC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017ECBC; -extern char *D_8017ECDC; -extern char *D_8017ECE0; -extern char *D_8017ECE4; -extern char *D_8017ECE8; -extern char *D_8017ECEC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017ECBC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017ECDC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECE0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECE4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECE8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ECEC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017EB76; -extern unsigned short D_8017EB7A; -extern unsigned short D_8017EB7E; -extern unsigned short D_8017EB82; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017EB76; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EB7A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EB7E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EB82; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F10C[])(void); - -void func_80141788(void) -{ - D_8017F10C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F118[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F118[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F090; -extern s16 D_8017F092; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017ED30; - extern u8 D_8017ED48; - extern u8 D_8017EDBC; - extern u8 D_8017EDC4; - extern void *D_8019BE70; - extern void *D_8019BE74; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019BE70 = &D_8017ED30; - D_8019BE74 = &D_8017EDBC; - } else { - D_8019BE70 = &D_8017ED48; - D_8019BE74 = &D_8017EDC4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F090 = 0xE; - D_8017F092 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F094: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F094; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F094); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F06C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F06C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F13C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F13C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F14C[])(void); - -void func_801425CC(void *a0) { - D_8017F14C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F130; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F130); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F160[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F160[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F17C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F17C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F34C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F34C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F404[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F404[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019B518; -extern u8 D_8019BE78; -extern u8 D_8019BE79; -extern u8 D_8019BE7A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019B518; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019BE78 = mul * (local.b[0] >> 4); - D_8019BE79 = mul * (local.b[1] >> 4); - D_8019BE7A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F154; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F154); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F170[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F170); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F33C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F33C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F35C[]; -extern unsigned char D_8017F3BC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F35C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F3BC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019B514; -extern u8 D_8019BE78; -extern u8 D_8019BE7C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019B514, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019BE78); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019BE78, 0x10); - memcpy(&D_8019BE7C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017F514[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017F514[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017F63C[])(void); - -void func_80143B30(void *a0) { - D_8017F63C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017F648[])(void); - -void func_80143C38(void *a0) { - D_8017F648[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017F650[])(void); - -void func_80143C98(void *a0) { - D_8017F650[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017F698[])(void); - -void func_80143E68(void *a0) { - D_8017F698[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017F6AC[])(void); - -void func_80144054(void *a0) { - D_8017F6AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017F6B4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017F6B4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017F630; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017F630, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017F644; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F644 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F644 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017F658; -extern u8 D_8017F664; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F658); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F664); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017F630; -extern u8 D_8017F6A0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017F630, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017F6A0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017F6BC[])(void); - -void func_801449C8(void *a0) { - D_8017F6BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017F6C4[])(void); - -void func_80144A2C(void *a0) { - D_8017F6C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_011/ov_SC05_011_jr_80140608.c b/src/ov_SC05_011/ov_SC05_011_jr_80140608.c new file mode 100644 index 000000000..e22394caa --- /dev/null +++ b/src/ov_SC05_011/ov_SC05_011_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019AB88; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017DFB0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019BD2C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019D170; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019AB88; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017DCEC)(); +extern s16 (*D_8017DCF0)(); +extern M2C_UNK (*D_8017DCF8)(); +extern s32 (*D_8017DCFC)(); +extern s32 D_8019BD28; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019AB8C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E044; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80181528; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E05C; +extern M2C_UNK D_8017E064; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E06C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E088[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E094[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E0A8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E0F8[]; +extern s16 D_8017E128[]; +extern s16 D_8017E188[]; +extern s16 D_8017E190[]; +extern s16 D_8017E1B0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E1E8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E240[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E288[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E290[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E298[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E2A0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E248; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E268; +extern void func_801321B0(int param_1); +extern int D_8017E278; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019BD98; +extern s32 D_8019BD9C[]; +extern int D_8019BDA0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E2AC; +extern u8 D_8017E2A8; +extern s16 *D_8017E2B0; +extern u8 D_8017E2B4; +extern int D_8019BD98; +extern u16 D_8019BDA8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E2B0; /* holds a pointer value (*(u16**)&D_8017E2B0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E2C4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E318; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E31C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E360; +extern u8 D_8017E3A4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E3E8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E460, D_8017E462, D_8017E464, D_8017E466, D_8017E468, D_8017E46A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019BE10; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019BE14; +extern s8 D_8019BE15; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019BE34; +extern s32 D_8019BE28; +extern s32 D_8019BE2C; +extern s32 D_8019BE38; +extern void func_8013CABC(void); +extern s32 D_8019BE30; +extern void func_8013CAE8(void); +extern s32 D_8019BE60; +extern s32 D_8019BE64; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019BE40; +extern s32 D_8019BE44; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019D16A; +extern u8 D_8019D1DE; +extern u8 D_8019D092; +extern u8 D_8019D14C; +extern u8 D_8019D070; +extern u8 D_8019D091; +extern s32 D_8019D150; +extern void func_8013D330(void); +extern void *D_8019BE18; +extern void *D_8019BE1C; +extern void *D_8019BE20; +extern s32 D_8019BE48; +extern s32 D_8019BE4C; +extern s32 D_8019BE50; +extern s32 D_8019D0C4[]; +extern u8 D_8017E558[]; +extern u8 D_8017E600[]; +extern u8 D_8017E4B0[]; +extern u8 D_8017E5AC[]; +extern u8 D_8017E62C[]; +extern u8 D_8017E504[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019BE24; +extern s32 D_8019BE54; +extern s32 D_8019BE58; +extern s32 D_8019BE5C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019BE3C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F0B8; +extern s32 D_80115188; +extern s16 D_8017F090; +extern s16 D_8017F092; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F094; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017ED70; +extern u8 *D_8017ED74; +extern u8 *D_8017ED78; +extern u8 *D_8017ED7C; +extern u8 *D_8017ED80; +extern u16 *D_8017ED84[]; +extern u16 *D_8017ED8C[]; +extern u16 *D_8017EDAC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017ED70; + iVar2 = func_80028D58(); + puVar3 = D_8017ED84[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017ED74; + iVar2 = func_80028DE0(); + puVar3 = D_8017ED84[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017ED78 + 0x18) = *D_8017ED8C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017ED7C + 0x18) = *D_8017ED8C[iVar2]; + + puVar1 = D_8017ED80; + iVar2 = func_80028D9C(); + puVar3 = D_8017EDAC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017ECAC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017ECAC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017ECBC; +extern char *D_8017ECDC; +extern char *D_8017ECE0; +extern char *D_8017ECE4; +extern char *D_8017ECE8; +extern char *D_8017ECEC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017ECBC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017ECDC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECE0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECE4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECE8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ECEC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017EB76; +extern unsigned short D_8017EB7A; +extern unsigned short D_8017EB7E; +extern unsigned short D_8017EB82; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017EB76; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EB7A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EB7E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EB82; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F10C[])(void); + +void func_80141788(void) +{ + D_8017F10C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F118[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F118[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F090; +extern s16 D_8017F092; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017ED30; + extern u8 D_8017ED48; + extern u8 D_8017EDBC; + extern u8 D_8017EDC4; + extern void *D_8019BE70; + extern void *D_8019BE74; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019BE70 = &D_8017ED30; + D_8019BE74 = &D_8017EDBC; + } else { + D_8019BE70 = &D_8017ED48; + D_8019BE74 = &D_8017EDC4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F090 = 0xE; + D_8017F092 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F094: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F094; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F094); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F06C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F06C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F13C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F13C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F14C[])(void); + +void func_801425CC(void *a0) { + D_8017F14C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F130; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F130); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F160[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F160[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F17C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F17C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F34C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F34C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F404[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F404[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019B518; +extern u8 D_8019BE78; +extern u8 D_8019BE79; +extern u8 D_8019BE7A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019B518; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019BE78 = mul * (local.b[0] >> 4); + D_8019BE79 = mul * (local.b[1] >> 4); + D_8019BE7A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F154; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F154); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F170[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F170); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F33C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F33C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F35C[]; +extern unsigned char D_8017F3BC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F35C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F3BC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019B514; +extern u8 D_8019BE78; +extern u8 D_8019BE7C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019B514, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019BE78); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019BE78, 0x10); + memcpy(&D_8019BE7C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017F514[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017F514[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017F63C[])(void); + +void func_80143B30(void *a0) { + D_8017F63C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017F648[])(void); + +void func_80143C38(void *a0) { + D_8017F648[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017F650[])(void); + +void func_80143C98(void *a0) { + D_8017F650[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80143D28); + + +extern void (*D_8017F698[])(void); + +void func_80143E68(void *a0) { + D_8017F698[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017F6AC[])(void); + +void func_80144054(void *a0) { + D_8017F6AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017F6B4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017F6B4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017F630; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017F630, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017F644; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F644 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F644 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017F658; +extern u8 D_8017F664; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F658); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F664); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017F630; +extern u8 D_8017F6A0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017F630, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017F6A0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017F6BC[])(void); + +void func_801449C8(void *a0) { + D_8017F6BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017F6C4[])(void); + +void func_80144A2C(void *a0) { + D_8017F6C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8013FFD8.c b/src/ov_SC05_017/ov_SC05_017_jr_8013FFD8.c index 038125383..4f821857e 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_8013FFD8.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018E230; -extern u8 *D_8018E234; -extern u8 *D_8018E238; -extern u8 *D_8018E23C; -extern u8 *D_8018E240; -extern u16 *D_8018E244[]; -extern u16 *D_8018E24C[]; -extern u16 *D_8018E26C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018E230; - iVar2 = func_80028D58(); - puVar3 = D_8018E244[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018E234; - iVar2 = func_80028DE0(); - puVar3 = D_8018E244[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018E238 + 0x18) = *D_8018E24C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018E23C + 0x18) = *D_8018E24C[iVar2]; - - puVar1 = D_8018E240; - iVar2 = func_80028D9C(); - puVar3 = D_8018E26C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018E16C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018E16C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018E17C; -extern char *D_8018E19C; -extern char *D_8018E1A0; -extern char *D_8018E1A4; -extern char *D_8018E1A8; -extern char *D_8018E1AC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018E17C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018E19C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1A0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1A4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1A8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E1AC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018E036; -extern unsigned short D_8018E03A; -extern unsigned short D_8018E03E; -extern unsigned short D_8018E042; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018E036; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E03A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E03E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E042; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018E5CC[])(void); - -void func_80141788(void) -{ - D_8018E5CC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018E5D8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018E5D8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018E550; -extern s16 D_8018E552; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018E1F0; - extern u8 D_8018E208; - extern u8 D_8018E27C; - extern u8 D_8018E284; - extern void *D_801EB9B0; - extern void *D_801EB9B4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801EB9B0 = &D_8018E1F0; - D_801EB9B4 = &D_8018E27C; - } else { - D_801EB9B0 = &D_8018E208; - D_801EB9B4 = &D_8018E284; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018E550 = 0xE; - D_8018E552 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018E554: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018E554; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018E554); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018E52C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018E52C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018E5FC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018E5FC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018E60C[])(void); - -void func_801425CC(void *a0) { - D_8018E60C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018E5F0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018E5F0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E620[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E620[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E63C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E63C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E80C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E80C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E8C4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E8C4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801EAC00; -extern u8 D_801EB9B8; -extern u8 D_801EB9B9; -extern u8 D_801EB9BA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801EAC00; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801EB9B8 = mul * (local.b[0] >> 4); - D_801EB9B9 = mul * (local.b[1] >> 4); - D_801EB9BA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018E614; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E614); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E630[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E630); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018E7FC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018E7FC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E81C[]; -extern unsigned char D_8018E87C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E81C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018E87C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801EABFC; -extern u8 D_801EB9B8; -extern u8 D_801EB9BC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801EABFC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801EB9B8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801EB9B8, 0x10); - memcpy(&D_801EB9BC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018E9D4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018E9D4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018EAFC[])(void); - -void func_80143B30(void *a0) { - D_8018EAFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018EB08[])(void); - -void func_80143C38(void *a0) { - D_8018EB08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018EB10[])(void); - -void func_80143C98(void *a0) { - D_8018EB10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018EB58[])(void); - -void func_80143E68(void *a0) { - D_8018EB58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018EB6C[])(void); - -void func_80144054(void *a0) { - D_8018EB6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018EB74[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018EB74[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018EAF0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018EAF0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018EB04; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EB04 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EB04 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018EB18; -extern u8 D_8018EB24; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EB18); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EB24); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018EAF0; -extern u8 D_8018EB60; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018EAF0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018EB60, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018EB7C[])(void); - -void func_801449C8(void *a0) { - D_8018EB7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018EB84[])(void); - -void func_80144A2C(void *a0) { - D_8018EB84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_017/ov_SC05_017_jr_80140608.c b/src/ov_SC05_017/ov_SC05_017_jr_80140608.c new file mode 100644 index 000000000..01c0c9d07 --- /dev/null +++ b/src/ov_SC05_017/ov_SC05_017_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801EA270; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018D470[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801EB86C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801ED918; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801EA270; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018D1A4)(); +extern s16 (*D_8018D1A8)(); +extern M2C_UNK (*D_8018D1B0)(); +extern s32 (*D_8018D1B4)(); +extern s32 D_801EB868; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801EA274; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018D504; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801909E8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018D51C; +extern M2C_UNK D_8018D524; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018D52C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018D548[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018D554[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018D568[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018D5B8[]; +extern s16 D_8018D5E8[]; +extern s16 D_8018D648[]; +extern s16 D_8018D650[]; +extern s16 D_8018D670[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018D6A8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018D700[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018D748[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018D750[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018D758[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018D760[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018D708; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018D728; +extern void func_801321B0(int param_1); +extern int D_8018D738; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801EB8D8; +extern s32 D_801EB8DC[]; +extern int D_801EB8E0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018D76C; +extern u8 D_8018D768; +extern s16 *D_8018D770; +extern u8 D_8018D774; +extern int D_801EB8D8; +extern u16 D_801EB8E8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018D770; /* holds a pointer value (*(u16**)&D_8018D770) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018D784[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018D7D8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018D7DC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018D820; +extern u8 D_8018D864; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018D8A8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018D920, D_8018D922, D_8018D924, D_8018D926, D_8018D928, D_8018D92A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801EB950; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801EB954; +extern s8 D_801EB955; +extern void func_8013C9C4(void * arg0); +extern s32 D_801EB974; +extern s32 D_801EB968; +extern s32 D_801EB96C; +extern s32 D_801EB978; +extern void func_8013CABC(void); +extern s32 D_801EB970; +extern void func_8013CAE8(void); +extern s32 D_801EB9A0; +extern s32 D_801EB9A4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801EB980; +extern s32 D_801EB984; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801ED912; +extern u8 D_801ED986; +extern u8 D_801ED812; +extern u8 D_801ED8DC; +extern u8 D_801ED7E8; +extern u8 D_801ED811; +extern s32 D_801ED8E0; +extern void func_8013D330(void); +extern void *D_801EB958; +extern void *D_801EB95C; +extern void *D_801EB960; +extern s32 D_801EB988; +extern s32 D_801EB98C; +extern s32 D_801EB990; +extern s32 D_801ED854[]; +extern u8 D_8018DA18[]; +extern u8 D_8018DAC0[]; +extern u8 D_8018D970[]; +extern u8 D_8018DA6C[]; +extern u8 D_8018DAEC[]; +extern u8 D_8018D9C4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801EB964; +extern s32 D_801EB994; +extern s32 D_801EB998; +extern s32 D_801EB99C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801EB97C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018E578; +extern s32 D_80115188; +extern s16 D_8018E550; +extern s16 D_8018E552; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018E554; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018E230; +extern u8 *D_8018E234; +extern u8 *D_8018E238; +extern u8 *D_8018E23C; +extern u8 *D_8018E240; +extern u16 *D_8018E244[]; +extern u16 *D_8018E24C[]; +extern u16 *D_8018E26C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018E230; + iVar2 = func_80028D58(); + puVar3 = D_8018E244[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018E234; + iVar2 = func_80028DE0(); + puVar3 = D_8018E244[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018E238 + 0x18) = *D_8018E24C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018E23C + 0x18) = *D_8018E24C[iVar2]; + + puVar1 = D_8018E240; + iVar2 = func_80028D9C(); + puVar3 = D_8018E26C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018E16C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018E16C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018E17C; +extern char *D_8018E19C; +extern char *D_8018E1A0; +extern char *D_8018E1A4; +extern char *D_8018E1A8; +extern char *D_8018E1AC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018E17C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018E19C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1A0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1A4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1A8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E1AC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018E036; +extern unsigned short D_8018E03A; +extern unsigned short D_8018E03E; +extern unsigned short D_8018E042; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018E036; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E03A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E03E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E042; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018E5CC[])(void); + +void func_80141788(void) +{ + D_8018E5CC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018E5D8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018E5D8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018E550; +extern s16 D_8018E552; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018E1F0; + extern u8 D_8018E208; + extern u8 D_8018E27C; + extern u8 D_8018E284; + extern void *D_801EB9B0; + extern void *D_801EB9B4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801EB9B0 = &D_8018E1F0; + D_801EB9B4 = &D_8018E27C; + } else { + D_801EB9B0 = &D_8018E208; + D_801EB9B4 = &D_8018E284; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018E550 = 0xE; + D_8018E552 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018E554: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018E554; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018E554); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018E52C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018E52C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018E5FC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018E5FC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018E60C[])(void); + +void func_801425CC(void *a0) { + D_8018E60C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018E5F0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018E5F0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E620[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E620[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E63C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E63C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E80C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E80C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E8C4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E8C4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801EAC00; +extern u8 D_801EB9B8; +extern u8 D_801EB9B9; +extern u8 D_801EB9BA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801EAC00; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801EB9B8 = mul * (local.b[0] >> 4); + D_801EB9B9 = mul * (local.b[1] >> 4); + D_801EB9BA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018E614; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E614); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E630[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E630); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018E7FC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018E7FC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E81C[]; +extern unsigned char D_8018E87C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E81C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018E87C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801EABFC; +extern u8 D_801EB9B8; +extern u8 D_801EB9BC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801EABFC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801EB9B8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801EB9B8, 0x10); + memcpy(&D_801EB9BC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018E9D4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018E9D4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018EAFC[])(void); + +void func_80143B30(void *a0) { + D_8018EAFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018EB08[])(void); + +void func_80143C38(void *a0) { + D_8018EB08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018EB10[])(void); + +void func_80143C98(void *a0) { + D_8018EB10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80143D28); + + +extern void (*D_8018EB58[])(void); + +void func_80143E68(void *a0) { + D_8018EB58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018EB6C[])(void); + +void func_80144054(void *a0) { + D_8018EB6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018EB74[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018EB74[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EAF0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018EAF0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018EB04; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EB04 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EB04 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018EB18; +extern u8 D_8018EB24; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EB18); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EB24); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018EAF0; +extern u8 D_8018EB60; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018EAF0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018EB60, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018EB7C[])(void); + +void func_801449C8(void *a0) { + D_8018EB7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018EB84[])(void); + +void func_80144A2C(void *a0) { + D_8018EB84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8013FFD8.c b/src/ov_SC05_018/ov_SC05_018_jr_8013FFD8.c index 074529670..91925edbb 100644 --- a/src/ov_SC05_018/ov_SC05_018_jr_8013FFD8.c +++ b/src/ov_SC05_018/ov_SC05_018_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018798C; -extern u8 *D_80187990; -extern u8 *D_80187994; -extern u8 *D_80187998; -extern u8 *D_8018799C; -extern u16 *D_801879A0[]; -extern u16 *D_801879A8[]; -extern u16 *D_801879C8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018798C; - iVar2 = func_80028D58(); - puVar3 = D_801879A0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80187990; - iVar2 = func_80028DE0(); - puVar3 = D_801879A0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80187994 + 0x18) = *D_801879A8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80187998 + 0x18) = *D_801879A8[iVar2]; - - puVar1 = D_8018799C; - iVar2 = func_80028D9C(); - puVar3 = D_801879C8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801878C8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801878C8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801878D8; -extern char *D_801878F8; -extern char *D_801878FC; -extern char *D_80187900; -extern char *D_80187904; -extern char *D_80187908; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801878D8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801878F8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801878FC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187900; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187904; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80187908; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80187792; -extern unsigned short D_80187796; -extern unsigned short D_8018779A; -extern unsigned short D_8018779E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80187792; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80187796; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018779A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018779E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80187D28[])(void); - -void func_80141788(void) -{ - D_80187D28[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80187D34[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80187D34[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80187CAC; -extern s16 D_80187CAE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018794C; - extern u8 D_80187964; - extern u8 D_801879D8; - extern u8 D_801879E0; - extern void *D_801E50F0; - extern void *D_801E50F4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E50F0 = &D_8018794C; - D_801E50F4 = &D_801879D8; - } else { - D_801E50F0 = &D_80187964; - D_801E50F4 = &D_801879E0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80187CAC = 0xE; - D_80187CAE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80187CB0: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80187CB0; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80187CB0); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80187C88; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80187C88 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80187D58[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80187D58[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80187D68[])(void); - -void func_801425CC(void *a0) { - D_80187D68[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80187D4C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80187D4C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187D7C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187D7C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187D98[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187D98[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187F68[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187F68[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188020[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188020[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E4774; -extern u8 D_801E50F8; -extern u8 D_801E50F9; -extern u8 D_801E50FA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E4774; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E50F8 = mul * (local.b[0] >> 4); - D_801E50F9 = mul * (local.b[1] >> 4); - D_801E50FA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80187D70; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187D70); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187D8C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187D8C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80187F58[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80187F58[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187F78[]; -extern unsigned char D_80187FD8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187F78); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80187FD8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E4770; -extern u8 D_801E50F8; -extern u8 D_801E50FC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E4770, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E50F8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E50F8, 0x10); - memcpy(&D_801E50FC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80188130[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80188130[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80188258[])(void); - -void func_80143B30(void *a0) { - D_80188258[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80188264[])(void); - -void func_80143C38(void *a0) { - D_80188264[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018826C[])(void); - -void func_80143C98(void *a0) { - D_8018826C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80143D28); - - -extern void (*D_801882B4[])(void); - -void func_80143E68(void *a0) { - D_801882B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801882C8[])(void); - -void func_80144054(void *a0) { - D_801882C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801882D0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801882D0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018824C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018824C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80188260; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188260 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188260 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80188274; -extern u8 D_80188280; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188274); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188280); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018824C; -extern u8 D_801882BC; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018824C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801882BC, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801882D8[])(void); - -void func_801449C8(void *a0) { - D_801882D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801882E0[])(void); - -void func_80144A2C(void *a0) { - D_801882E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_018/ov_SC05_018_jr_80140608.c b/src/ov_SC05_018/ov_SC05_018_jr_80140608.c new file mode 100644 index 000000000..1c6860eb9 --- /dev/null +++ b/src/ov_SC05_018/ov_SC05_018_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801E3DE4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80186BCC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E4FAC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E6820; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801E3DE4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80186908)(); +extern s16 (*D_8018690C)(); +extern M2C_UNK (*D_80186914)(); +extern s32 (*D_80186918)(); +extern s32 D_801E4FA8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801E3DE8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80186C60; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018A144; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80186C78; +extern M2C_UNK D_80186C80; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80186C88; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80186CA4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80186CB0[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80186CC4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80186D14[]; +extern s16 D_80186D44[]; +extern s16 D_80186DA4[]; +extern s16 D_80186DAC[]; +extern s16 D_80186DCC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80186E04[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80186E5C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80186EA4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80186EAC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80186EB4[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80186EBC[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80186E64; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80186E84; +extern void func_801321B0(int param_1); +extern int D_80186E94; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E5018; +extern s32 D_801E501C[]; +extern int D_801E5020; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80186EC8; +extern u8 D_80186EC4; +extern s16 *D_80186ECC; +extern u8 D_80186ED0; +extern int D_801E5018; +extern u16 D_801E5028; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186ECC; /* holds a pointer value (*(u16**)&D_80186ECC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186EE0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80186F34; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186F38[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80186F7C; +extern u8 D_80186FC0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80187004[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018707C, D_8018707E, D_80187080, D_80187082, D_80187084, D_80187086; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E5090; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E5094; +extern s8 D_801E5095; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E50B4; +extern s32 D_801E50A8; +extern s32 D_801E50AC; +extern s32 D_801E50B8; +extern void func_8013CABC(void); +extern s32 D_801E50B0; +extern void func_8013CAE8(void); +extern s32 D_801E50E0; +extern s32 D_801E50E4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E50C0; +extern s32 D_801E50C4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E681A; +extern u8 D_801E688E; +extern u8 D_801E6712; +extern u8 D_801E67E4; +extern u8 D_801E66E8; +extern u8 D_801E6711; +extern s32 D_801E67E8; +extern void func_8013D330(void); +extern void *D_801E5098; +extern void *D_801E509C; +extern void *D_801E50A0; +extern s32 D_801E50C8; +extern s32 D_801E50CC; +extern s32 D_801E50D0; +extern s32 D_801E675C[]; +extern u8 D_80187174[]; +extern u8 D_8018721C[]; +extern u8 D_801870CC[]; +extern u8 D_801871C8[]; +extern u8 D_80187248[]; +extern u8 D_80187120[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E50A4; +extern s32 D_801E50D4; +extern s32 D_801E50D8; +extern s32 D_801E50DC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E50BC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80187CD4; +extern s32 D_80115188; +extern s16 D_80187CAC; +extern s16 D_80187CAE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80187CB0; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018798C; +extern u8 *D_80187990; +extern u8 *D_80187994; +extern u8 *D_80187998; +extern u8 *D_8018799C; +extern u16 *D_801879A0[]; +extern u16 *D_801879A8[]; +extern u16 *D_801879C8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018798C; + iVar2 = func_80028D58(); + puVar3 = D_801879A0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80187990; + iVar2 = func_80028DE0(); + puVar3 = D_801879A0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80187994 + 0x18) = *D_801879A8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80187998 + 0x18) = *D_801879A8[iVar2]; + + puVar1 = D_8018799C; + iVar2 = func_80028D9C(); + puVar3 = D_801879C8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801878C8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801878C8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801878D8; +extern char *D_801878F8; +extern char *D_801878FC; +extern char *D_80187900; +extern char *D_80187904; +extern char *D_80187908; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801878D8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801878F8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801878FC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187900; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187904; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80187908; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80187792; +extern unsigned short D_80187796; +extern unsigned short D_8018779A; +extern unsigned short D_8018779E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80187792; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80187796; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018779A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018779E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80187D28[])(void); + +void func_80141788(void) +{ + D_80187D28[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80187D34[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80187D34[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80187CAC; +extern s16 D_80187CAE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018794C; + extern u8 D_80187964; + extern u8 D_801879D8; + extern u8 D_801879E0; + extern void *D_801E50F0; + extern void *D_801E50F4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E50F0 = &D_8018794C; + D_801E50F4 = &D_801879D8; + } else { + D_801E50F0 = &D_80187964; + D_801E50F4 = &D_801879E0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80187CAC = 0xE; + D_80187CAE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80187CB0: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80187CB0; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80187CB0); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80187C88; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80187C88 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80187D58[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80187D58[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80187D68[])(void); + +void func_801425CC(void *a0) { + D_80187D68[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80187D4C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80187D4C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187D7C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187D7C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187D98[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187D98[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187F68[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187F68[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188020[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188020[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E4774; +extern u8 D_801E50F8; +extern u8 D_801E50F9; +extern u8 D_801E50FA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E4774; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E50F8 = mul * (local.b[0] >> 4); + D_801E50F9 = mul * (local.b[1] >> 4); + D_801E50FA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80187D70; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187D70); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187D8C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187D8C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80187F58[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80187F58[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187F78[]; +extern unsigned char D_80187FD8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187F78); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80187FD8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E4770; +extern u8 D_801E50F8; +extern u8 D_801E50FC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E4770, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E50F8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E50F8, 0x10); + memcpy(&D_801E50FC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80188130[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80188130[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80188258[])(void); + +void func_80143B30(void *a0) { + D_80188258[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80188264[])(void); + +void func_80143C38(void *a0) { + D_80188264[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018826C[])(void); + +void func_80143C98(void *a0) { + D_8018826C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80143D28); + + +extern void (*D_801882B4[])(void); + +void func_80143E68(void *a0) { + D_801882B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801882C8[])(void); + +void func_80144054(void *a0) { + D_801882C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801882D0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801882D0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018824C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018824C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80188260; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188260 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188260 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80188274; +extern u8 D_80188280; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188274); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188280); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018824C; +extern u8 D_801882BC; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018824C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801882BC, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801882D8[])(void); + +void func_801449C8(void *a0) { + D_801882D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801882E0[])(void); + +void func_80144A2C(void *a0) { + D_801882E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c b/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c index a92fa4508..742f31e91 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801802D0; -extern u8 *D_801802D4; -extern u8 *D_801802D8; -extern u8 *D_801802DC; -extern u8 *D_801802E0; -extern u16 *D_801802E4[]; -extern u16 *D_801802EC[]; -extern u16 *D_8018030C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801802D0; - iVar2 = func_80028D58(); - puVar3 = D_801802E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801802D4; - iVar2 = func_80028DE0(); - puVar3 = D_801802E4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801802D8 + 0x18) = *D_801802EC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801802DC + 0x18) = *D_801802EC[iVar2]; - - puVar1 = D_801802E0; - iVar2 = func_80028D9C(); - puVar3 = D_8018030C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018020C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018020C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018021C; -extern char *D_8018023C; -extern char *D_80180240; -extern char *D_80180244; -extern char *D_80180248; -extern char *D_8018024C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018021C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018023C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180240; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180244; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180248; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018024C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801800D6; -extern unsigned short D_801800DA; -extern unsigned short D_801800DE; -extern unsigned short D_801800E2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801800D6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801800DA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801800DE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801800E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018066C[])(void); - -void func_80141788(void) -{ - D_8018066C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80180678[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80180678[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801805F0; -extern s16 D_801805F2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180290; - extern u8 D_801802A8; - extern u8 D_8018031C; - extern u8 D_80180324; - extern void *D_8018E7C0; - extern void *D_8018E7C4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018E7C0 = &D_80180290; - D_8018E7C4 = &D_8018031C; - } else { - D_8018E7C0 = &D_801802A8; - D_8018E7C4 = &D_80180324; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801805F0 = 0xE; - D_801805F2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801805F4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801805F4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801805F4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801805CC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801805CC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018069C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018069C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801806AC[])(void); - -void func_801425CC(void *a0) { - D_801806AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80180690; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80180690); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801806C0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801806C0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801806DC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801806DC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801808AC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801808AC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180964[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180964[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8018DE88; -extern u8 D_8018E7C8; -extern u8 D_8018E7C9; -extern u8 D_8018E7CA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018DE88; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018E7C8 = mul * (local.b[0] >> 4); - D_8018E7C9 = mul * (local.b[1] >> 4); - D_8018E7CA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801806B4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801806B4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801806D0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801806D0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018089C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018089C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801808BC[]; -extern unsigned char D_8018091C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801808BC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018091C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8018DE84; -extern u8 D_8018E7C8; -extern u8 D_8018E7CC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018DE84, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E7C8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018E7C8, 0x10); - memcpy(&D_8018E7CC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180A74[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180A74[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80180B9C[])(void); - -void func_80143B30(void *a0) { - D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80180BA8[])(void); - -void func_80143C38(void *a0) { - D_80180BA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180BB0[])(void); - -void func_80143C98(void *a0) { - D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180BF8[])(void); - -void func_80143E68(void *a0) { - D_80180BF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180C0C[])(void); - -void func_80144054(void *a0) { - D_80180C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180C14[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180C14[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80180B90; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80180B90, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80180BA4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BA4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BA4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80180BB8; -extern u8 D_80180BC4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180BB8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180BC4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80180B90; -extern u8 D_80180C00; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80180B90, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180C00, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180C1C[])(void); - -void func_801449C8(void *a0) { - D_80180C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180C24[])(void); - -void func_80144A2C(void *a0) { - D_80180C24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC05_019/ov_SC05_019_jr_80140608.c b/src/ov_SC05_019/ov_SC05_019_jr_80140608.c new file mode 100644 index 000000000..1c6dcb224 --- /dev/null +++ b/src/ov_SC05_019/ov_SC05_019_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8018D4F8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017F510[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8018E67C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8018FAB8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8018D4F8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017F24C)(); +extern s16 (*D_8017F250)(); +extern M2C_UNK (*D_8017F258)(); +extern s32 (*D_8017F25C)(); +extern s32 D_8018E678; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D4FC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017F5A4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182A88; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017F5BC; +extern M2C_UNK D_8017F5C4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017F5CC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017F5E8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017F5F4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017F608[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017F658[]; +extern s16 D_8017F688[]; +extern s16 D_8017F6E8[]; +extern s16 D_8017F6F0[]; +extern s16 D_8017F710[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F748[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F7A0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F7E8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F7F0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F7F8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F800[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F7A8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F7C8; +extern void func_801321B0(int param_1); +extern int D_8017F7D8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8018E6E8; +extern s32 D_8018E6EC[]; +extern int D_8018E6F0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F80C; +extern u8 D_8017F808; +extern s16 *D_8017F810; +extern u8 D_8017F814; +extern int D_8018E6E8; +extern u16 D_8018E6F8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F810; /* holds a pointer value (*(u16**)&D_8017F810) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F824[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F878; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F87C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F8C0; +extern u8 D_8017F904; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F948[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F9C0, D_8017F9C2, D_8017F9C4, D_8017F9C6, D_8017F9C8, D_8017F9CA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8018E760; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8018E764; +extern s8 D_8018E765; +extern void func_8013C9C4(void * arg0); +extern s32 D_8018E784; +extern s32 D_8018E778; +extern s32 D_8018E77C; +extern s32 D_8018E788; +extern void func_8013CABC(void); +extern s32 D_8018E780; +extern void func_8013CAE8(void); +extern s32 D_8018E7B0; +extern s32 D_8018E7B4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8018E790; +extern s32 D_8018E794; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8018FAB2; +extern u8 D_8018FB2C; +extern u8 D_8018F9DA; +extern u8 D_8018FA94; +extern u8 D_8018F9B8; +extern u8 D_8018F9D9; +extern s32 D_8018FA98; +extern void func_8013D330(void); +extern void *D_8018E768; +extern void *D_8018E76C; +extern void *D_8018E770; +extern s32 D_8018E798; +extern s32 D_8018E79C; +extern s32 D_8018E7A0; +extern s32 D_8018FA0C[]; +extern u8 D_8017FAB8[]; +extern u8 D_8017FB60[]; +extern u8 D_8017FA10[]; +extern u8 D_8017FB0C[]; +extern u8 D_8017FB8C[]; +extern u8 D_8017FA64[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8018E774; +extern s32 D_8018E7A4; +extern s32 D_8018E7A8; +extern s32 D_8018E7AC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8018E78C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80180618; +extern s32 D_80115188; +extern s16 D_801805F0; +extern s16 D_801805F2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801805F4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801802D0; +extern u8 *D_801802D4; +extern u8 *D_801802D8; +extern u8 *D_801802DC; +extern u8 *D_801802E0; +extern u16 *D_801802E4[]; +extern u16 *D_801802EC[]; +extern u16 *D_8018030C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801802D0; + iVar2 = func_80028D58(); + puVar3 = D_801802E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801802D4; + iVar2 = func_80028DE0(); + puVar3 = D_801802E4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801802D8 + 0x18) = *D_801802EC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801802DC + 0x18) = *D_801802EC[iVar2]; + + puVar1 = D_801802E0; + iVar2 = func_80028D9C(); + puVar3 = D_8018030C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018020C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018020C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018021C; +extern char *D_8018023C; +extern char *D_80180240; +extern char *D_80180244; +extern char *D_80180248; +extern char *D_8018024C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018021C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018023C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180240; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180244; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180248; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018024C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801800D6; +extern unsigned short D_801800DA; +extern unsigned short D_801800DE; +extern unsigned short D_801800E2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801800D6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801800DA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801800DE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801800E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018066C[])(void); + +void func_80141788(void) +{ + D_8018066C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80180678[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80180678[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801805F0; +extern s16 D_801805F2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180290; + extern u8 D_801802A8; + extern u8 D_8018031C; + extern u8 D_80180324; + extern void *D_8018E7C0; + extern void *D_8018E7C4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018E7C0 = &D_80180290; + D_8018E7C4 = &D_8018031C; + } else { + D_8018E7C0 = &D_801802A8; + D_8018E7C4 = &D_80180324; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801805F0 = 0xE; + D_801805F2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801805F4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801805F4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801805F4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801805CC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801805CC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018069C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018069C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801806AC[])(void); + +void func_801425CC(void *a0) { + D_801806AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80180690; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80180690); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801806C0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801806C0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801806DC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801806DC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801808AC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801808AC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180964[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180964[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8018DE88; +extern u8 D_8018E7C8; +extern u8 D_8018E7C9; +extern u8 D_8018E7CA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018DE88; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018E7C8 = mul * (local.b[0] >> 4); + D_8018E7C9 = mul * (local.b[1] >> 4); + D_8018E7CA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801806B4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801806B4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801806D0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801806D0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018089C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018089C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801808BC[]; +extern unsigned char D_8018091C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801808BC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018091C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8018DE84; +extern u8 D_8018E7C8; +extern u8 D_8018E7CC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018DE84, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018E7C8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018E7C8, 0x10); + memcpy(&D_8018E7CC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180A74[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180A74[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80180B9C[])(void); + +void func_80143B30(void *a0) { + D_80180B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80180BA8[])(void); + +void func_80143C38(void *a0) { + D_80180BA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180BB0[])(void); + +void func_80143C98(void *a0) { + D_80180BB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80143D28); + + +extern void (*D_80180BF8[])(void); + +void func_80143E68(void *a0) { + D_80180BF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180C0C[])(void); + +void func_80144054(void *a0) { + D_80180C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180C14[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180C14[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180B90; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80180B90, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80180BA4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80180BA4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80180BA4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80180BB8; +extern u8 D_80180BC4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80180BB8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180BC4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80180B90; +extern u8 D_80180C00; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80180B90, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180C00, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180C1C[])(void); + +void func_801449C8(void *a0) { + D_80180C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180C24[])(void); + +void func_80144A2C(void *a0) { + D_80180C24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c b/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c index 34435778f..1a84aa422 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c @@ -1401,1168 +1401,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801892E0; -extern u8 *D_801892E4; -extern u8 *D_801892E8; -extern u8 *D_801892EC; -extern u8 *D_801892F0; -extern u16 *D_801892F4[]; -extern u16 *D_801892FC[]; -extern u16 *D_8018931C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801892E0; - iVar2 = func_80028D58(); - puVar3 = D_801892F4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801892E4; - iVar2 = func_80028DE0(); - puVar3 = D_801892F4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801892E8 + 0x18) = *D_801892FC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801892EC + 0x18) = *D_801892FC[iVar2]; - - puVar1 = D_801892F0; - iVar2 = func_80028D9C(); - puVar3 = D_8018931C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018921C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018921C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018922C; -extern char *D_8018924C; -extern char *D_80189250; -extern char *D_80189254; -extern char *D_80189258; -extern char *D_8018925C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018922C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018924C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80189250; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80189254; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80189258; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018925C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801890E6; -extern unsigned short D_801890EA; -extern unsigned short D_801890EE; -extern unsigned short D_801890F2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801890E6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801890EA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801890EE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801890F2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018967C[])(void); - -void func_80141788(void) -{ - D_8018967C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80189688[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80189688[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; -extern s16 D_80189600; -extern s16 D_80189602; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801892A0; - extern u8 D_801892B8; - extern u8 D_8018932C; - extern u8 D_80189334; - extern void *D_801AD430; - extern void *D_801AD434; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801AD430 = &D_801892A0; - D_801AD434 = &D_8018932C; - } else { - D_801AD430 = &D_801892B8; - D_801AD434 = &D_80189334; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80189600 = 0xE; - D_80189602 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80189604: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u8 D_80189604; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80189604); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801895DC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801895DC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801896AC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801896AC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801896BC[])(void); - -void func_801425CC(void *a0) { - D_801896BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801896A0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801896A0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801896D0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801896D0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801896EC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801896EC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801898BC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801898BC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80189974[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80189974[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801ACB00; -extern u8 D_801AD438; -extern u8 D_801AD439; -extern u8 D_801AD43A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801ACB00; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801AD438 = mul * (local.b[0] >> 4); - D_801AD439 = mul * (local.b[1] >> 4); - D_801AD43A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801896C4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801896C4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801896E0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801896E0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801898AC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801898AC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801898CC[]; -extern unsigned char D_8018992C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801898CC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018992C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801ACAFC; -extern u8 D_801AD438; -extern u8 D_801AD43C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801ACAFC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801AD438); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801AD438, 0x10); - memcpy(&D_801AD43C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80189A84[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80189A84[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80189BAC[])(void); - -void func_80143B30(void *a0) { - D_80189BAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80189BB8[])(void); - -void func_80143C38(void *a0) { - D_80189BB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80189BC0[])(void); - -void func_80143C98(void *a0) { - D_80189BC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80143D28); - - -extern void (*D_80189C08[])(void); - -void func_80143E68(void *a0) { - D_80189C08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80189C1C[])(void); - -void func_80144054(void *a0) { - D_80189C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80189C24[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80189C24[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80189BA0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80189BA0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80189BB4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189BB4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189BB4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80189BC8; -extern u8 D_80189BD4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189BC8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189BD4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80189BA0; -extern u8 D_80189C10; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80189BA0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80189C10, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80189C2C[])(void); - -void func_801449C8(void *a0) { - D_80189C2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80189C34[])(void); - -void func_80144A2C(void *a0) { - D_80189C34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8013F350", func_80144B14); - - diff --git a/src/ov_SC06_000/ov_SC06_000_jr_80140608.c b/src/ov_SC06_000/ov_SC06_000_jr_80140608.c new file mode 100644 index 000000000..621c70117 --- /dev/null +++ b/src/ov_SC06_000/ov_SC06_000_jr_80140608.c @@ -0,0 +1,2250 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AC170; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80188520[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801AD2EC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B20E0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AC170; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018825C)(); +extern s16 (*D_80188260)(); +extern M2C_UNK (*D_80188268)(); +extern s32 (*D_8018826C)(); +extern s32 D_801AD2E8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AC174; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801885B4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018BA98; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801885CC; +extern M2C_UNK D_801885D4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801885DC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801885F8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80188604[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80188618[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80188668[]; +extern s16 D_80188698[]; +extern s16 D_801886F8[]; +extern s16 D_80188700[]; +extern s16 D_80188720[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80188758[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801887B0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801887F8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80188800[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80188808[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80188810[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801887B8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801887D8; +extern void func_801321B0(int param_1); +extern int D_801887E8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801AD358; +extern s32 D_801AD35C[]; +extern int D_801AD360; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018881C; +extern u8 D_80188818; +extern s16 *D_80188820; +extern u8 D_80188824; +extern int D_801AD358; +extern u16 D_801AD368; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80188820; /* holds a pointer value (*(u16**)&D_80188820) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80188834[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80188888; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_801380E0(s32 arg0); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018888C[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801888D0; +extern u8 D_80188914; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80188958[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801889D0, D_801889D2, D_801889D4, D_801889D6, D_801889D8, D_801889DA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801AD3D0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801AD3D4; +extern s8 D_801AD3D5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801AD3F4; +extern s32 D_801AD3E8; +extern s32 D_801AD3EC; +extern s32 D_801AD3F8; +extern void func_8013CABC(void); +extern s32 D_801AD3F0; +extern void func_8013CAE8(void); +extern s32 D_801AD420; +extern s32 D_801AD424; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801AD400; +extern s32 D_801AD404; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern u8 D_801B20DA; +extern u8 D_801B2186; +extern u8 D_801B2002; +extern u8 D_801B20BC; +extern u8 D_801B1FE0; +extern u8 D_801B2001; +extern s32 D_801B20C0; +extern void func_8013D330(void); +extern void *D_801AD3D8; +extern void *D_801AD3DC; +extern void *D_801AD3E0; +extern s32 D_801AD408; +extern s32 D_801AD40C; +extern s32 D_801AD410; +extern s32 D_801B2034[]; +extern u8 D_80188AC8[]; +extern u8 D_80188B70[]; +extern u8 D_80188A20[]; +extern u8 D_80188B1C[]; +extern u8 D_80188B9C[]; +extern u8 D_80188A74[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801AD3E4; +extern s32 D_801AD414; +extern s32 D_801AD418; +extern s32 D_801AD41C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801AD3FC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80189628; +extern s32 D_80115188; +extern s16 D_80189600; +extern s16 D_80189602; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80189604; +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern u16 D_8011512E; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_80189324[]; +extern u8 D_8018933C[]; +extern u16 D_80189240[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801892E0; +extern u8 *D_801892E4; +extern u8 *D_801892E8; +extern u8 *D_801892EC; +extern u8 *D_801892F0; +extern u16 *D_801892F4[]; +extern u16 *D_801892FC[]; +extern u16 *D_8018931C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801892E0; + iVar2 = func_80028D58(); + puVar3 = D_801892F4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801892E4; + iVar2 = func_80028DE0(); + puVar3 = D_801892F4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801892E8 + 0x18) = *D_801892FC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801892EC + 0x18) = *D_801892FC[iVar2]; + + puVar1 = D_801892F0; + iVar2 = func_80028D9C(); + puVar3 = D_8018931C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018921C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018921C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018922C; +extern char *D_8018924C; +extern char *D_80189250; +extern char *D_80189254; +extern char *D_80189258; +extern char *D_8018925C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018922C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018924C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80189250; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80189254; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80189258; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018925C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801890E6; +extern unsigned short D_801890EA; +extern unsigned short D_801890EE; +extern unsigned short D_801890F2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801890E6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801890EA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801890EE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801890F2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018967C[])(void); + +void func_80141788(void) +{ + D_8018967C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80189688[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80189688[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; +extern s16 D_80189600; +extern s16 D_80189602; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801892A0; + extern u8 D_801892B8; + extern u8 D_8018932C; + extern u8 D_80189334; + extern void *D_801AD430; + extern void *D_801AD434; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801AD430 = &D_801892A0; + D_801AD434 = &D_8018932C; + } else { + D_801AD430 = &D_801892B8; + D_801AD434 = &D_80189334; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80189600 = 0xE; + D_80189602 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80189604: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u8 D_80189604; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80189604); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801895DC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801895DC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801896AC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801896AC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801896BC[])(void); + +void func_801425CC(void *a0) { + D_801896BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801896A0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801896A0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801896D0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801896D0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801896EC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801896EC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801898BC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801898BC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80189974[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80189974[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801ACB00; +extern u8 D_801AD438; +extern u8 D_801AD439; +extern u8 D_801AD43A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801ACB00; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801AD438 = mul * (local.b[0] >> 4); + D_801AD439 = mul * (local.b[1] >> 4); + D_801AD43A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801896C4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801896C4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801896E0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801896E0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801898AC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801898AC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801898CC[]; +extern unsigned char D_8018992C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801898CC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018992C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801ACAFC; +extern u8 D_801AD438; +extern u8 D_801AD43C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801ACAFC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801AD438); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801AD438, 0x10); + memcpy(&D_801AD43C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80189A84[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80189A84[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80189BAC[])(void); + +void func_80143B30(void *a0) { + D_80189BAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80189BB8[])(void); + +void func_80143C38(void *a0) { + D_80189BB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80189BC0[])(void); + +void func_80143C98(void *a0) { + D_80189BC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80143D28); + + +extern void (*D_80189C08[])(void); + +void func_80143E68(void *a0) { + D_80189C08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80189C1C[])(void); + +void func_80144054(void *a0) { + D_80189C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80189C24[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80189C24[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189BA0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80189BA0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80189BB4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80189BB4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80189BB4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80189BC8; +extern u8 D_80189BD4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80189BC8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80189BD4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80189BA0; +extern u8 D_80189C10; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80189BA0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80189C10, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80189C2C[])(void); + +void func_801449C8(void *a0) { + D_80189C2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80189C34[])(void); + +void func_80144A2C(void *a0) { + D_80189C34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80140608", func_80144B14); + + + diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c b/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c index ea7679ac9..f40035691 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80182E04; -extern u8 *D_80182E08; -extern u8 *D_80182E0C; -extern u8 *D_80182E10; -extern u8 *D_80182E14; -extern u16 *D_80182E18[]; -extern u16 *D_80182E20[]; -extern u16 *D_80182E40[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80182E04; - iVar2 = func_80028D58(); - puVar3 = D_80182E18[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80182E08; - iVar2 = func_80028DE0(); - puVar3 = D_80182E18[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80182E0C + 0x18) = *D_80182E20[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80182E10 + 0x18) = *D_80182E20[iVar2]; - - puVar1 = D_80182E14; - iVar2 = func_80028D9C(); - puVar3 = D_80182E40[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80182D40; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80182D40); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80182D50; -extern char *D_80182D70; -extern char *D_80182D74; -extern char *D_80182D78; -extern char *D_80182D7C; -extern char *D_80182D80; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80182D50); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80182D70; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D74; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D78; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D7C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182D80; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80182C0A; -extern unsigned short D_80182C0E; -extern unsigned short D_80182C12; -extern unsigned short D_80182C16; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80182C0A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80182C0E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182C12; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182C16; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801831A0[])(void); - -void func_80141788(void) -{ - D_801831A0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801831AC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801831AC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80183124; -extern s16 D_80183126; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182DC4; - extern u8 D_80182DDC; - extern u8 D_80182E50; - extern u8 D_80182E58; - extern void *D_801F6E78; - extern void *D_801F6E7C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801F6E78 = &D_80182DC4; - D_801F6E7C = &D_80182E50; - } else { - D_801F6E78 = &D_80182DDC; - D_801F6E7C = &D_80182E58; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183124 = 0xE; - D_80183126 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80183128: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80183128; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80183128); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80183100; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80183100 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801831D0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801831D0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801831E0[])(void); - -void func_801425CC(void *a0) { - D_801831E0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801831C4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801831C4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801831F4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801831F4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183210[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183210[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801833E0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801833E0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183498[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183498[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801F6408; -extern u8 D_801F6E80; -extern u8 D_801F6E81; -extern u8 D_801F6E82; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801F6408; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801F6E80 = mul * (local.b[0] >> 4); - D_801F6E81 = mul * (local.b[1] >> 4); - D_801F6E82 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801831E8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801831E8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183204[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183204); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801833D0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801833D0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801833F0[]; -extern unsigned char D_80183450[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801833F0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183450); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801F6404; -extern u8 D_801F6E80; -extern u8 D_801F6E84; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801F6404, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801F6E80); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801F6E80, 0x10); - memcpy(&D_801F6E84, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801835A8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801835A8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801836D0[])(void); - -void func_80143B30(void *a0) { - D_801836D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801836DC[])(void); - -void func_80143C38(void *a0) { - D_801836DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801836E4[])(void); - -void func_80143C98(void *a0) { - D_801836E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018372C[])(void); - -void func_80143E68(void *a0) { - D_8018372C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80183740[])(void); - -void func_80144054(void *a0) { - D_80183740[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80183748[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80183748[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801836C4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801836C4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801836D8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801836D8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801836D8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801836EC; -extern u8 D_801836F8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801836EC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801836F8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801836C4; -extern u8 D_80183734; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801836C4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183734, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80183750[])(void); - -void func_801449C8(void *a0) { - D_80183750[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183758[])(void); - -void func_80144A2C(void *a0) { - D_80183758[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_006/ov_SC06_006_jr_80140608.c b/src/ov_SC06_006/ov_SC06_006_jr_80140608.c new file mode 100644 index 000000000..bc8420f6d --- /dev/null +++ b/src/ov_SC06_006/ov_SC06_006_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801F5A78; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182044[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801F6D34; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801F8AF8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801F5A78; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80181D80)(); +extern s16 (*D_80181D84)(); +extern M2C_UNK (*D_80181D8C)(); +extern s32 (*D_80181D90)(); +extern s32 D_801F6D30; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801F5A7C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801820D8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801855BC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801820F0; +extern M2C_UNK D_801820F8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80182100; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018211C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80182128[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018213C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018218C[]; +extern s16 D_801821BC[]; +extern s16 D_8018221C[]; +extern s16 D_80182224[]; +extern s16 D_80182244[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018227C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801822D4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018231C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182324[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018232C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182334[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801822DC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801822FC; +extern void func_801321B0(int param_1); +extern int D_8018230C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801F6DA0; +extern s32 D_801F6DA4[]; +extern int D_801F6DA8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182340; +extern u8 D_8018233C; +extern s16 *D_80182344; +extern u8 D_80182348; +extern int D_801F6DA0; +extern u16 D_801F6DB0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182344; /* holds a pointer value (*(u16**)&D_80182344) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182358[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_801823AC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_801823B0[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801823F4; +extern u8 D_80182438; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018247C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801824F4, D_801824F6, D_801824F8, D_801824FA, D_801824FC, D_801824FE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801F6E18; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801F6E1C; +extern s8 D_801F6E1D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801F6E3C; +extern s32 D_801F6E30; +extern s32 D_801F6E34; +extern s32 D_801F6E40; +extern void func_8013CABC(void); +extern s32 D_801F6E38; +extern void func_8013CAE8(void); +extern s32 D_801F6E68; +extern s32 D_801F6E6C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801F6E48; +extern s32 D_801F6E4C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801F8AF6; +extern u8 D_801F8B66; +extern u8 D_801F8A18; +extern u8 D_801F8AD4; +extern u8 D_801F89E8; +extern u8 D_801F8A09; +extern s32 D_801F8AD8; +extern void func_8013D330(void); +extern void *D_801F6E20; +extern void *D_801F6E24; +extern void *D_801F6E28; +extern s32 D_801F6E50; +extern s32 D_801F6E54; +extern s32 D_801F6E58; +extern s32 D_801F8A4C[]; +extern u8 D_801825EC[]; +extern u8 D_80182694[]; +extern u8 D_80182544[]; +extern u8 D_80182640[]; +extern u8 D_801826C0[]; +extern u8 D_80182598[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801F6E2C; +extern s32 D_801F6E5C; +extern s32 D_801F6E60; +extern s32 D_801F6E64; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801F6E44; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018314C; +extern s32 D_80115188; +extern s16 D_80183124; +extern s16 D_80183126; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80183128; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80182E04; +extern u8 *D_80182E08; +extern u8 *D_80182E0C; +extern u8 *D_80182E10; +extern u8 *D_80182E14; +extern u16 *D_80182E18[]; +extern u16 *D_80182E20[]; +extern u16 *D_80182E40[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80182E04; + iVar2 = func_80028D58(); + puVar3 = D_80182E18[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80182E08; + iVar2 = func_80028DE0(); + puVar3 = D_80182E18[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80182E0C + 0x18) = *D_80182E20[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80182E10 + 0x18) = *D_80182E20[iVar2]; + + puVar1 = D_80182E14; + iVar2 = func_80028D9C(); + puVar3 = D_80182E40[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80182D40; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80182D40); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80182D50; +extern char *D_80182D70; +extern char *D_80182D74; +extern char *D_80182D78; +extern char *D_80182D7C; +extern char *D_80182D80; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80182D50); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80182D70; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D74; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D78; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D7C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182D80; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80182C0A; +extern unsigned short D_80182C0E; +extern unsigned short D_80182C12; +extern unsigned short D_80182C16; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80182C0A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80182C0E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182C12; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182C16; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801831A0[])(void); + +void func_80141788(void) +{ + D_801831A0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801831AC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801831AC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80183124; +extern s16 D_80183126; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182DC4; + extern u8 D_80182DDC; + extern u8 D_80182E50; + extern u8 D_80182E58; + extern void *D_801F6E78; + extern void *D_801F6E7C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801F6E78 = &D_80182DC4; + D_801F6E7C = &D_80182E50; + } else { + D_801F6E78 = &D_80182DDC; + D_801F6E7C = &D_80182E58; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183124 = 0xE; + D_80183126 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80183128: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80183128; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80183128); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80183100; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80183100 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801831D0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801831D0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801831E0[])(void); + +void func_801425CC(void *a0) { + D_801831E0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801831C4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801831C4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801831F4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801831F4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183210[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183210[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801833E0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801833E0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183498[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183498[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801F6408; +extern u8 D_801F6E80; +extern u8 D_801F6E81; +extern u8 D_801F6E82; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801F6408; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801F6E80 = mul * (local.b[0] >> 4); + D_801F6E81 = mul * (local.b[1] >> 4); + D_801F6E82 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801831E8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801831E8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183204[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183204); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801833D0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801833D0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801833F0[]; +extern unsigned char D_80183450[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801833F0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183450); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801F6404; +extern u8 D_801F6E80; +extern u8 D_801F6E84; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801F6404, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801F6E80); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801F6E80, 0x10); + memcpy(&D_801F6E84, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801835A8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801835A8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801836D0[])(void); + +void func_80143B30(void *a0) { + D_801836D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801836DC[])(void); + +void func_80143C38(void *a0) { + D_801836DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801836E4[])(void); + +void func_80143C98(void *a0) { + D_801836E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80143D28); + + +extern void (*D_8018372C[])(void); + +void func_80143E68(void *a0) { + D_8018372C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80183740[])(void); + +void func_80144054(void *a0) { + D_80183740[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80183748[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80183748[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801836C4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801836C4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801836D8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801836D8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801836D8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801836EC; +extern u8 D_801836F8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801836EC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801836F8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801836C4; +extern u8 D_80183734; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801836C4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183734, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80183750[])(void); + +void func_801449C8(void *a0) { + D_80183750[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183758[])(void); + +void func_80144A2C(void *a0) { + D_80183758[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c b/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c index 5a279e757..5650faee2 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018686C; -extern u8 *D_80186870; -extern u8 *D_80186874; -extern u8 *D_80186878; -extern u8 *D_8018687C; -extern u16 *D_80186880[]; -extern u16 *D_80186888[]; -extern u16 *D_801868A8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018686C; - iVar2 = func_80028D58(); - puVar3 = D_80186880[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80186870; - iVar2 = func_80028DE0(); - puVar3 = D_80186880[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80186874 + 0x18) = *D_80186888[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80186878 + 0x18) = *D_80186888[iVar2]; - - puVar1 = D_8018687C; - iVar2 = func_80028D9C(); - puVar3 = D_801868A8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801867A8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801867A8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801867B8; -extern char *D_801867D8; -extern char *D_801867DC; -extern char *D_801867E0; -extern char *D_801867E4; -extern char *D_801867E8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801867B8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801867D8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801867DC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801867E0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801867E4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801867E8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80186672; -extern unsigned short D_80186676; -extern unsigned short D_8018667A; -extern unsigned short D_8018667E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80186672; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80186676; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018667A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018667E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186C08[])(void); - -void func_80141788(void) -{ - D_80186C08[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186C14[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186C14[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186B8C; -extern s16 D_80186B8E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018682C; - extern u8 D_80186844; - extern u8 D_801868B8; - extern u8 D_801868C0; - extern void *D_801A8DF8; - extern void *D_801A8DFC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A8DF8 = &D_8018682C; - D_801A8DFC = &D_801868B8; - } else { - D_801A8DF8 = &D_80186844; - D_801A8DFC = &D_801868C0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186B8C = 0xE; - D_80186B8E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186B90: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186B90; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186B90); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80186B68; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80186B68 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186C38[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186C38[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186C48[])(void); - -void func_801425CC(void *a0) { - D_80186C48[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186C2C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186C2C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186C5C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186C5C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186C78[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186C78[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186E48[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186E48[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186F00[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186F00[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A84E0; -extern u8 D_801A8E00; -extern u8 D_801A8E01; -extern u8 D_801A8E02; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A84E0; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A8E00 = mul * (local.b[0] >> 4); - D_801A8E01 = mul * (local.b[1] >> 4); - D_801A8E02 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80186C50; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186C50); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186C6C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186C6C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80186E38[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80186E38[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80186E58[]; -extern unsigned char D_80186EB8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186E58); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80186EB8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A84DC; -extern u8 D_801A8E00; -extern u8 D_801A8E04; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A84DC, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A8E00); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A8E00, 0x10); - memcpy(&D_801A8E04, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80187010[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80187010[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80187138[])(void); - -void func_80143B30(void *a0) { - D_80187138[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80187144[])(void); - -void func_80143C38(void *a0) { - D_80187144[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018714C[])(void); - -void func_80143C98(void *a0) { - D_8018714C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80143D28); - - -extern void (*D_80187194[])(void); - -void func_80143E68(void *a0) { - D_80187194[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801871A8[])(void); - -void func_80144054(void *a0) { - D_801871A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801871B0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801871B0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018712C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018712C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80187140; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187140 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187140 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80187154; -extern u8 D_80187160; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187154); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187160); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018712C; -extern u8 D_8018719C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018712C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018719C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801871B8[])(void); - -void func_801449C8(void *a0) { - D_801871B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801871C0[])(void); - -void func_80144A2C(void *a0) { - D_801871C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_008/ov_SC06_008_jr_80140608.c b/src/ov_SC06_008/ov_SC06_008_jr_80140608.c new file mode 100644 index 000000000..8a9c5b977 --- /dev/null +++ b/src/ov_SC06_008/ov_SC06_008_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A7B50; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80185AAC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A8CB4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AA7C8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A7B50; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801857E8)(); +extern s16 (*D_801857EC)(); +extern M2C_UNK (*D_801857F4)(); +extern s32 (*D_801857F8)(); +extern s32 D_801A8CB0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A7B54; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80185B40; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80189024; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80185B58; +extern M2C_UNK D_80185B60; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80185B68; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185B84[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185B90[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185BA4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185BF4[]; +extern s16 D_80185C24[]; +extern s16 D_80185C84[]; +extern s16 D_80185C8C[]; +extern s16 D_80185CAC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80185CE4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185D3C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185D84[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185D8C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80185D94[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80185D9C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80185D44; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80185D64; +extern void func_801321B0(int param_1); +extern int D_80185D74; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A8D20; +extern s32 D_801A8D24[]; +extern int D_801A8D28; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185DA8; +extern u8 D_80185DA4; +extern s16 *D_80185DAC; +extern u8 D_80185DB0; +extern int D_801A8D20; +extern u16 D_801A8D30; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80185DAC; /* holds a pointer value (*(u16**)&D_80185DAC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80185DC0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185E14; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185E18[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80185E5C; +extern u8 D_80185EA0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80185EE4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80185F5C, D_80185F5E, D_80185F60, D_80185F62, D_80185F64, D_80185F66; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A8D98; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A8D9C; +extern s8 D_801A8D9D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A8DBC; +extern s32 D_801A8DB0; +extern s32 D_801A8DB4; +extern s32 D_801A8DC0; +extern void func_8013CABC(void); +extern s32 D_801A8DB8; +extern void func_8013CAE8(void); +extern s32 D_801A8DE8; +extern s32 D_801A8DEC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A8DC8; +extern s32 D_801A8DCC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AA7C2; +extern u8 D_801AA836; +extern u8 D_801AA6EA; +extern u8 D_801AA7A4; +extern u8 D_801AA6C8; +extern u8 D_801AA6E9; +extern s32 D_801AA7A8; +extern void func_8013D330(void); +extern void *D_801A8DA0; +extern void *D_801A8DA4; +extern void *D_801A8DA8; +extern s32 D_801A8DD0; +extern s32 D_801A8DD4; +extern s32 D_801A8DD8; +extern s32 D_801AA71C[]; +extern u8 D_80186054[]; +extern u8 D_801860FC[]; +extern u8 D_80185FAC[]; +extern u8 D_801860A8[]; +extern u8 D_80186128[]; +extern u8 D_80186000[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A8DAC; +extern s32 D_801A8DDC; +extern s32 D_801A8DE0; +extern s32 D_801A8DE4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A8DC4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80186BB4; +extern s32 D_80115188; +extern s16 D_80186B8C; +extern s16 D_80186B8E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186B90; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018686C; +extern u8 *D_80186870; +extern u8 *D_80186874; +extern u8 *D_80186878; +extern u8 *D_8018687C; +extern u16 *D_80186880[]; +extern u16 *D_80186888[]; +extern u16 *D_801868A8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018686C; + iVar2 = func_80028D58(); + puVar3 = D_80186880[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80186870; + iVar2 = func_80028DE0(); + puVar3 = D_80186880[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80186874 + 0x18) = *D_80186888[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80186878 + 0x18) = *D_80186888[iVar2]; + + puVar1 = D_8018687C; + iVar2 = func_80028D9C(); + puVar3 = D_801868A8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801867A8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801867A8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801867B8; +extern char *D_801867D8; +extern char *D_801867DC; +extern char *D_801867E0; +extern char *D_801867E4; +extern char *D_801867E8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801867B8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801867D8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801867DC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801867E0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801867E4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801867E8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80186672; +extern unsigned short D_80186676; +extern unsigned short D_8018667A; +extern unsigned short D_8018667E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80186672; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80186676; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018667A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018667E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186C08[])(void); + +void func_80141788(void) +{ + D_80186C08[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186C14[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186C14[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186B8C; +extern s16 D_80186B8E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018682C; + extern u8 D_80186844; + extern u8 D_801868B8; + extern u8 D_801868C0; + extern void *D_801A8DF8; + extern void *D_801A8DFC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A8DF8 = &D_8018682C; + D_801A8DFC = &D_801868B8; + } else { + D_801A8DF8 = &D_80186844; + D_801A8DFC = &D_801868C0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186B8C = 0xE; + D_80186B8E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186B90: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186B90; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186B90); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80186B68; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80186B68 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186C38[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186C38[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186C48[])(void); + +void func_801425CC(void *a0) { + D_80186C48[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186C2C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186C2C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186C5C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186C5C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186C78[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186C78[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186E48[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186E48[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186F00[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186F00[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A84E0; +extern u8 D_801A8E00; +extern u8 D_801A8E01; +extern u8 D_801A8E02; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A84E0; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A8E00 = mul * (local.b[0] >> 4); + D_801A8E01 = mul * (local.b[1] >> 4); + D_801A8E02 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80186C50; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186C50); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186C6C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80186C6C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80186E38[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80186E38[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80186E58[]; +extern unsigned char D_80186EB8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80186E58); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80186EB8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A84DC; +extern u8 D_801A8E00; +extern u8 D_801A8E04; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A84DC, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A8E00); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A8E00, 0x10); + memcpy(&D_801A8E04, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80187010[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80187010[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80187138[])(void); + +void func_80143B30(void *a0) { + D_80187138[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80187144[])(void); + +void func_80143C38(void *a0) { + D_80187144[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018714C[])(void); + +void func_80143C98(void *a0) { + D_8018714C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80143D28); + + +extern void (*D_80187194[])(void); + +void func_80143E68(void *a0) { + D_80187194[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801871A8[])(void); + +void func_80144054(void *a0) { + D_801871A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801871B0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801871B0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018712C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018712C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80187140; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80187140 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80187140 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80187154; +extern u8 D_80187160; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80187154); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80187160); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018712C; +extern u8 D_8018719C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018712C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018719C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801871B8[])(void); + +void func_801449C8(void *a0) { + D_801871B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801871C0[])(void); + +void func_80144A2C(void *a0) { + D_801871C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c b/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c index 50ef19b00..95cb0250d 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c @@ -1399,1168 +1399,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80187A48; -extern u8 *D_80187A4C; -extern u8 *D_80187A50; -extern u8 *D_80187A54; -extern u8 *D_80187A58; -extern u16 *D_80187A5C[]; -extern u16 *D_80187A64[]; -extern u16 *D_80187A84[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80187A48; - iVar2 = func_80028D58(); - puVar3 = D_80187A5C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80187A4C; - iVar2 = func_80028DE0(); - puVar3 = D_80187A5C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80187A50 + 0x18) = *D_80187A64[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80187A54 + 0x18) = *D_80187A64[iVar2]; - - puVar1 = D_80187A58; - iVar2 = func_80028D9C(); - puVar3 = D_80187A84[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80187984; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80187984); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80187994; -extern char *D_801879B4; -extern char *D_801879B8; -extern char *D_801879BC; -extern char *D_801879C0; -extern char *D_801879C4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80187994); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801879B4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801879B8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801879BC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801879C0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801879C4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018784E; -extern unsigned short D_80187852; -extern unsigned short D_80187856; -extern unsigned short D_8018785A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018784E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80187852; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80187856; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018785A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80187DE4[])(void); - -void func_80141788(void) -{ - D_80187DE4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80187DF0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80187DF0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; -extern s16 D_80187D68; -extern s16 D_80187D6A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80187A08; - extern u8 D_80187A20; - extern u8 D_80187A94; - extern u8 D_80187A9C; - extern void *D_801B0E30; - extern void *D_801B0E34; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B0E30 = &D_80187A08; - D_801B0E34 = &D_80187A94; - } else { - D_801B0E30 = &D_80187A20; - D_801B0E34 = &D_80187A9C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80187D68 = 0xE; - D_80187D6A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80187D6C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u8 D_80187D6C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80187D6C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80187D44; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80187D44 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80187E14[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80187E14[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80187E24[])(void); - -void func_801425CC(void *a0) { - D_80187E24[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80187E08; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80187E08); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187E38[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187E38[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187E54[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187E54[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188024[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188024[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801880DC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801880DC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B0534; -extern u8 D_801B0E38; -extern u8 D_801B0E39; -extern u8 D_801B0E3A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B0534; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B0E38 = mul * (local.b[0] >> 4); - D_801B0E39 = mul * (local.b[1] >> 4); - D_801B0E3A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80187E2C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187E2C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187E48[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187E48); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80188014[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80188014[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80188034[]; -extern unsigned char D_80188094[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188034); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80188094); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B0530; -extern u8 D_801B0E38; -extern u8 D_801B0E3C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B0530, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B0E38); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B0E38, 0x10); - memcpy(&D_801B0E3C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801881EC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801881EC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80188314[])(void); - -void func_80143B30(void *a0) { - D_80188314[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80188320[])(void); - -void func_80143C38(void *a0) { - D_80188320[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80188328[])(void); - -void func_80143C98(void *a0) { - D_80188328[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80143D28); - - -extern void (*D_80188370[])(void); - -void func_80143E68(void *a0) { - D_80188370[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80188384[])(void); - -void func_80144054(void *a0) { - D_80188384[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018838C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018838C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80188308; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80188308, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018831C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018831C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018831C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80188330; -extern u8 D_8018833C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188330); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018833C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80188308; -extern u8 D_80188378; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80188308, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80188378, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80188394[])(void); - -void func_801449C8(void *a0) { - D_80188394[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018839C[])(void); - -void func_80144A2C(void *a0) { - D_8018839C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8013F350", func_80144B14); - - diff --git a/src/ov_SC06_010/ov_SC06_010_jr_80140608.c b/src/ov_SC06_010/ov_SC06_010_jr_80140608.c new file mode 100644 index 000000000..2cc4c19f8 --- /dev/null +++ b/src/ov_SC06_010/ov_SC06_010_jr_80140608.c @@ -0,0 +1,2248 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AFBA4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80186C88[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B0CEC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B2C10; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AFBA4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801869C4)(); +extern s16 (*D_801869C8)(); +extern M2C_UNK (*D_801869D0)(); +extern s32 (*D_801869D4)(); +extern s32 D_801B0CE8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AFBA8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80186D1C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018A200; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80186D34; +extern M2C_UNK D_80186D3C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80186D44; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80186D60[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80186D6C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80186D80[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80186DD0[]; +extern s16 D_80186E00[]; +extern s16 D_80186E60[]; +extern s16 D_80186E68[]; +extern s16 D_80186E88[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80186EC0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80186F18[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80186F60[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80186F68[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80186F70[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80186F78[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80186F20; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80186F40; +extern void func_801321B0(int param_1); +extern int D_80186F50; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B0D58; +extern s32 D_801B0D5C[]; +extern int D_801B0D60; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80186F84; +extern u8 D_80186F80; +extern s16 *D_80186F88; +extern u8 D_80186F8C; +extern int D_801B0D58; +extern u16 D_801B0D68; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186F88; /* holds a pointer value (*(u16**)&D_80186F88) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186F9C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80186FF0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_801380E0(s32 arg0); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186FF4[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80187038; +extern u8 D_8018707C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801870C0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80187138, D_8018713A, D_8018713C, D_8018713E, D_80187140, D_80187142; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B0DD0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B0DD4; +extern s8 D_801B0DD5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B0DF4; +extern s32 D_801B0DE8; +extern s32 D_801B0DEC; +extern s32 D_801B0DF8; +extern void func_8013CABC(void); +extern s32 D_801B0DF0; +extern void func_8013CAE8(void); +extern s32 D_801B0E20; +extern s32 D_801B0E24; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B0E00; +extern s32 D_801B0E04; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern u8 D_801B2C0A; +extern u8 D_801B2C7E; +extern u8 D_801B2B32; +extern u8 D_801B2BEC; +extern u8 D_801B2B10; +extern u8 D_801B2B31; +extern s32 D_801B2BF0; +extern void func_8013D330(void); +extern void *D_801B0DD8; +extern void *D_801B0DDC; +extern void *D_801B0DE0; +extern s32 D_801B0E08; +extern s32 D_801B0E0C; +extern s32 D_801B0E10; +extern s32 D_801B2B64[]; +extern u8 D_80187230[]; +extern u8 D_801872D8[]; +extern u8 D_80187188[]; +extern u8 D_80187284[]; +extern u8 D_80187304[]; +extern u8 D_801871DC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B0DE4; +extern s32 D_801B0E14; +extern s32 D_801B0E18; +extern s32 D_801B0E1C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B0DFC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80187D90; +extern s32 D_80115188; +extern s16 D_80187D68; +extern s16 D_80187D6A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80187D6C; +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern u16 D_8011512E; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_80187A8C[]; +extern u8 D_80187AA4[]; +extern u16 D_801879A8[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80187A48; +extern u8 *D_80187A4C; +extern u8 *D_80187A50; +extern u8 *D_80187A54; +extern u8 *D_80187A58; +extern u16 *D_80187A5C[]; +extern u16 *D_80187A64[]; +extern u16 *D_80187A84[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80187A48; + iVar2 = func_80028D58(); + puVar3 = D_80187A5C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80187A4C; + iVar2 = func_80028DE0(); + puVar3 = D_80187A5C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80187A50 + 0x18) = *D_80187A64[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80187A54 + 0x18) = *D_80187A64[iVar2]; + + puVar1 = D_80187A58; + iVar2 = func_80028D9C(); + puVar3 = D_80187A84[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80187984; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80187984); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80187994; +extern char *D_801879B4; +extern char *D_801879B8; +extern char *D_801879BC; +extern char *D_801879C0; +extern char *D_801879C4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80187994); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801879B4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801879B8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801879BC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801879C0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801879C4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018784E; +extern unsigned short D_80187852; +extern unsigned short D_80187856; +extern unsigned short D_8018785A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018784E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80187852; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80187856; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018785A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80187DE4[])(void); + +void func_80141788(void) +{ + D_80187DE4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80187DF0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80187DF0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; +extern s16 D_80187D68; +extern s16 D_80187D6A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80187A08; + extern u8 D_80187A20; + extern u8 D_80187A94; + extern u8 D_80187A9C; + extern void *D_801B0E30; + extern void *D_801B0E34; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B0E30 = &D_80187A08; + D_801B0E34 = &D_80187A94; + } else { + D_801B0E30 = &D_80187A20; + D_801B0E34 = &D_80187A9C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80187D68 = 0xE; + D_80187D6A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80187D6C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u8 D_80187D6C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80187D6C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80187D44; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80187D44 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80187E14[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80187E14[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80187E24[])(void); + +void func_801425CC(void *a0) { + D_80187E24[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80187E08; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80187E08); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187E38[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187E38[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187E54[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187E54[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188024[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188024[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801880DC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801880DC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B0534; +extern u8 D_801B0E38; +extern u8 D_801B0E39; +extern u8 D_801B0E3A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B0534; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B0E38 = mul * (local.b[0] >> 4); + D_801B0E39 = mul * (local.b[1] >> 4); + D_801B0E3A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80187E2C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187E2C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187E48[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187E48); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80188014[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80188014[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80188034[]; +extern unsigned char D_80188094[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80188034); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80188094); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B0530; +extern u8 D_801B0E38; +extern u8 D_801B0E3C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B0530, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B0E38); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B0E38, 0x10); + memcpy(&D_801B0E3C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801881EC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801881EC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80188314[])(void); + +void func_80143B30(void *a0) { + D_80188314[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80188320[])(void); + +void func_80143C38(void *a0) { + D_80188320[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80188328[])(void); + +void func_80143C98(void *a0) { + D_80188328[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80143D28); + + +extern void (*D_80188370[])(void); + +void func_80143E68(void *a0) { + D_80188370[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80188384[])(void); + +void func_80144054(void *a0) { + D_80188384[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018838C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018838C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188308; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80188308, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018831C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018831C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018831C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80188330; +extern u8 D_8018833C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188330); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018833C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80188308; +extern u8 D_80188378; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80188308, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80188378, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80188394[])(void); + +void func_801449C8(void *a0) { + D_80188394[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018839C[])(void); + +void func_80144A2C(void *a0) { + D_8018839C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80140608", func_80144B14); + + + diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8013FFD8.c b/src/ov_SC06_011/ov_SC06_011_jr_8013FFD8.c index cb842be19..7fe9e3729 100644 --- a/src/ov_SC06_011/ov_SC06_011_jr_8013FFD8.c +++ b/src/ov_SC06_011/ov_SC06_011_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801814A8; -extern u8 *D_801814AC; -extern u8 *D_801814B0; -extern u8 *D_801814B4; -extern u8 *D_801814B8; -extern u16 *D_801814BC[]; -extern u16 *D_801814C4[]; -extern u16 *D_801814E4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801814A8; - iVar2 = func_80028D58(); - puVar3 = D_801814BC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801814AC; - iVar2 = func_80028DE0(); - puVar3 = D_801814BC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801814B0 + 0x18) = *D_801814C4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801814B4 + 0x18) = *D_801814C4[iVar2]; - - puVar1 = D_801814B8; - iVar2 = func_80028D9C(); - puVar3 = D_801814E4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801813E4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801813E4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801813F4; -extern char *D_80181414; -extern char *D_80181418; -extern char *D_8018141C; -extern char *D_80181420; -extern char *D_80181424; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801813F4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80181414; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181418; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018141C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181420; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80181424; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801812AE; -extern unsigned short D_801812B2; -extern unsigned short D_801812B6; -extern unsigned short D_801812BA; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801812AE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801812B2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801812B6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801812BA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80181844[])(void); - -void func_80141788(void) -{ - D_80181844[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80181850[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80181850[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801817C8; -extern s16 D_801817CA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80181468; - extern u8 D_80181480; - extern u8 D_801814F4; - extern u8 D_801814FC; - extern void *D_801AA9E0; - extern void *D_801AA9E4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801AA9E0 = &D_80181468; - D_801AA9E4 = &D_801814F4; - } else { - D_801AA9E0 = &D_80181480; - D_801AA9E4 = &D_801814FC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801817C8 = 0xE; - D_801817CA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801817CC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801817CC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801817CC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801817A4; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801817A4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80181874[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80181874[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80181884[])(void); - -void func_801425CC(void *a0) { - D_80181884[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80181868; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80181868); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181898[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181898[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801818B4[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801818B4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181A84[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181A84[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181B3C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181B3C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801AA094; -extern u8 D_801AA9E8; -extern u8 D_801AA9E9; -extern u8 D_801AA9EA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801AA094; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801AA9E8 = mul * (local.b[0] >> 4); - D_801AA9E9 = mul * (local.b[1] >> 4); - D_801AA9EA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018188C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018188C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801818A8[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801818A8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80181A74[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80181A74[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181A94[]; -extern unsigned char D_80181AF4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181A94); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80181AF4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801AA090; -extern u8 D_801AA9E8; -extern u8 D_801AA9EC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801AA090, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801AA9E8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801AA9E8, 0x10); - memcpy(&D_801AA9EC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80181C4C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80181C4C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80181D74[])(void); - -void func_80143B30(void *a0) { - D_80181D74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80181D80[])(void); - -void func_80143C38(void *a0) { - D_80181D80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80181D88[])(void); - -void func_80143C98(void *a0) { - D_80181D88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80143D28); - - -extern void (*D_80181DD0[])(void); - -void func_80143E68(void *a0) { - D_80181DD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80181DE4[])(void); - -void func_80144054(void *a0) { - D_80181DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80181DEC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80181DEC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80181D68; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80181D68, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80181D7C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181D7C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181D7C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80181D90; -extern u8 D_80181D9C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181D90); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181D9C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80181D68; -extern u8 D_80181DD8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80181D68, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80181DD8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80181DF4[])(void); - -void func_801449C8(void *a0) { - D_80181DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80181DFC[])(void); - -void func_80144A2C(void *a0) { - D_80181DFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_011/ov_SC06_011_jr_80140608.c b/src/ov_SC06_011/ov_SC06_011_jr_80140608.c new file mode 100644 index 000000000..26c3e6b14 --- /dev/null +++ b/src/ov_SC06_011/ov_SC06_011_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A9704; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801806E8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801AA89C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801ABCE8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A9704; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80180424)(); +extern s16 (*D_80180428)(); +extern M2C_UNK (*D_80180430)(); +extern s32 (*D_80180434)(); +extern s32 D_801AA898; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A9708; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018077C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80183C60; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80180794; +extern M2C_UNK D_8018079C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801807A4; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801807C0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801807CC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801807E0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80180830[]; +extern s16 D_80180860[]; +extern s16 D_801808C0[]; +extern s16 D_801808C8[]; +extern s16 D_801808E8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80180920[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80180978[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801809C0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801809C8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801809D0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801809D8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80180980; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801809A0; +extern void func_801321B0(int param_1); +extern int D_801809B0; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801AA908; +extern s32 D_801AA90C[]; +extern int D_801AA910; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801809E4; +extern u8 D_801809E0; +extern s16 *D_801809E8; +extern u8 D_801809EC; +extern int D_801AA908; +extern u16 D_801AA918; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801809E8; /* holds a pointer value (*(u16**)&D_801809E8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801809FC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80180A50; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80180A54[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80180A98; +extern u8 D_80180ADC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80180B20[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80180B98, D_80180B9A, D_80180B9C, D_80180B9E, D_80180BA0, D_80180BA2; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801AA980; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801AA984; +extern s8 D_801AA985; +extern void func_8013C9C4(void * arg0); +extern s32 D_801AA9A4; +extern s32 D_801AA998; +extern s32 D_801AA99C; +extern s32 D_801AA9A8; +extern void func_8013CABC(void); +extern s32 D_801AA9A0; +extern void func_8013CAE8(void); +extern s32 D_801AA9D0; +extern s32 D_801AA9D4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801AA9B0; +extern s32 D_801AA9B4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801ABCE2; +extern u8 D_801ABD56; +extern u8 D_801ABC0A; +extern u8 D_801ABCC4; +extern u8 D_801ABBE0; +extern u8 D_801ABC09; +extern s32 D_801ABCC8; +extern void func_8013D330(void); +extern void *D_801AA988; +extern void *D_801AA98C; +extern void *D_801AA990; +extern s32 D_801AA9B8; +extern s32 D_801AA9BC; +extern s32 D_801AA9C0; +extern s32 D_801ABC3C[]; +extern u8 D_80180C90[]; +extern u8 D_80180D38[]; +extern u8 D_80180BE8[]; +extern u8 D_80180CE4[]; +extern u8 D_80180D64[]; +extern u8 D_80180C3C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801AA994; +extern s32 D_801AA9C4; +extern s32 D_801AA9C8; +extern s32 D_801AA9CC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801AA9AC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801817F0; +extern s32 D_80115188; +extern s16 D_801817C8; +extern s16 D_801817CA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801817CC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801814A8; +extern u8 *D_801814AC; +extern u8 *D_801814B0; +extern u8 *D_801814B4; +extern u8 *D_801814B8; +extern u16 *D_801814BC[]; +extern u16 *D_801814C4[]; +extern u16 *D_801814E4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801814A8; + iVar2 = func_80028D58(); + puVar3 = D_801814BC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801814AC; + iVar2 = func_80028DE0(); + puVar3 = D_801814BC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801814B0 + 0x18) = *D_801814C4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801814B4 + 0x18) = *D_801814C4[iVar2]; + + puVar1 = D_801814B8; + iVar2 = func_80028D9C(); + puVar3 = D_801814E4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801813E4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801813E4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801813F4; +extern char *D_80181414; +extern char *D_80181418; +extern char *D_8018141C; +extern char *D_80181420; +extern char *D_80181424; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801813F4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80181414; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181418; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018141C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181420; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80181424; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801812AE; +extern unsigned short D_801812B2; +extern unsigned short D_801812B6; +extern unsigned short D_801812BA; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801812AE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801812B2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801812B6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801812BA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80181844[])(void); + +void func_80141788(void) +{ + D_80181844[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80181850[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80181850[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801817C8; +extern s16 D_801817CA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80181468; + extern u8 D_80181480; + extern u8 D_801814F4; + extern u8 D_801814FC; + extern void *D_801AA9E0; + extern void *D_801AA9E4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801AA9E0 = &D_80181468; + D_801AA9E4 = &D_801814F4; + } else { + D_801AA9E0 = &D_80181480; + D_801AA9E4 = &D_801814FC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801817C8 = 0xE; + D_801817CA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801817CC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801817CC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801817CC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801817A4; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801817A4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80181874[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80181874[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80181884[])(void); + +void func_801425CC(void *a0) { + D_80181884[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80181868; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80181868); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181898[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181898[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801818B4[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801818B4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181A84[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181A84[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181B3C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181B3C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801AA094; +extern u8 D_801AA9E8; +extern u8 D_801AA9E9; +extern u8 D_801AA9EA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801AA094; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801AA9E8 = mul * (local.b[0] >> 4); + D_801AA9E9 = mul * (local.b[1] >> 4); + D_801AA9EA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018188C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018188C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801818A8[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801818A8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80181A74[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80181A74[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181A94[]; +extern unsigned char D_80181AF4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181A94); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80181AF4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801AA090; +extern u8 D_801AA9E8; +extern u8 D_801AA9EC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801AA090, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801AA9E8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801AA9E8, 0x10); + memcpy(&D_801AA9EC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80181C4C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80181C4C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80181D74[])(void); + +void func_80143B30(void *a0) { + D_80181D74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80181D80[])(void); + +void func_80143C38(void *a0) { + D_80181D80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80181D88[])(void); + +void func_80143C98(void *a0) { + D_80181D88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80143D28); + + +extern void (*D_80181DD0[])(void); + +void func_80143E68(void *a0) { + D_80181DD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80181DE4[])(void); + +void func_80144054(void *a0) { + D_80181DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80181DEC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80181DEC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181D68; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80181D68, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80181D7C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80181D7C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80181D7C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80181D90; +extern u8 D_80181D9C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181D90); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80181D9C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80181D68; +extern u8 D_80181DD8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80181D68, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80181DD8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80181DF4[])(void); + +void func_801449C8(void *a0) { + D_80181DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80181DFC[])(void); + +void func_80144A2C(void *a0) { + D_80181DFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c b/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c index b61929620..cacfab8e1 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c @@ -1089,1168 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FC24; -extern u8 *D_8017FC28; -extern u8 *D_8017FC2C; -extern u8 *D_8017FC30; -extern u8 *D_8017FC34; -extern u16 *D_8017FC38[]; -extern u16 *D_8017FC40[]; -extern u16 *D_8017FC60[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FC24; - iVar2 = func_80028D58(); - puVar3 = D_8017FC38[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FC28; - iVar2 = func_80028DE0(); - puVar3 = D_8017FC38[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FC2C + 0x18) = *D_8017FC40[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FC30 + 0x18) = *D_8017FC40[iVar2]; - - puVar1 = D_8017FC34; - iVar2 = func_80028D9C(); - puVar3 = D_8017FC60[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017FB60; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017FB60); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017FB70; -extern char *D_8017FB90; -extern char *D_8017FB94; -extern char *D_8017FB98; -extern char *D_8017FB9C; -extern char *D_8017FBA0; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017FB70); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FB90; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FB94; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FB98; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FB9C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FBA0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017FA2A; -extern unsigned short D_8017FA2E; -extern unsigned short D_8017FA32; -extern unsigned short D_8017FA36; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017FA2A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FA2E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FA32; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017FA36; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017FFC0[])(void); - -void func_80141788(void) -{ - D_8017FFC0[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017FFCC[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FFCC[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017FF44; -extern s16 D_8017FF46; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017FBE4; - extern u8 D_8017FBFC; - extern u8 D_8017FC70; - extern u8 D_8017FC78; - extern void *D_80199898; - extern void *D_8019989C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80199898 = &D_8017FBE4; - D_8019989C = &D_8017FC70; - } else { - D_80199898 = &D_8017FBFC; - D_8019989C = &D_8017FC78; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017FF44 = 0xE; - D_8017FF46 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017FF48: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017FF48; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017FF48); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017FF20; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017FF20 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FFF0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FFF0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - - -void func_801425CC(void *a0) { - - extern void (*D_80180000[])(void); - D_80180000[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FFE4; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FFE4); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180014[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180014[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180030[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180030[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180200[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180200[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801802B8[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801802B8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80198F68; -extern u8 D_801998A0; -extern u8 D_801998A1; -extern u8 D_801998A2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80198F68; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801998A0 = mul * (local.b[0] >> 4); - D_801998A1 = mul * (local.b[1] >> 4); - D_801998A2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80180008; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180008); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180024[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180024); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801801F0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801801F0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80180210[]; -extern unsigned char D_80180270[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180210); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80180270); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80198F64; -extern u8 D_801998A0; -extern u8 D_801998A4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80198F64, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801998A0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801998A0, 0x10); - memcpy(&D_801998A4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_801803C8[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801803C8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801804F0[])(void); - -void func_80143B30(void *a0) { - D_801804F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801804FC[])(void); - -void func_80143C38(void *a0) { - D_801804FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80180504[])(void); - -void func_80143C98(void *a0) { - D_80180504[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018054C[])(void); - -void func_80143E68(void *a0) { - D_8018054C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80180560[])(void); - -void func_80144054(void *a0) { - D_80180560[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180568[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180568[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801804E4; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801804E4, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801804F8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801804F8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801804F8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018050C; -extern u8 D_80180518; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018050C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180518); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801804E4; -extern u8 D_80180554; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801804E4, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180554, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80180570[])(void); - -void func_801449C8(void *a0) { - D_80180570[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180578[])(void); - -void func_80144A2C(void *a0) { - D_80180578[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_013/ov_SC06_013_jr_80140608.c b/src/ov_SC06_013/ov_SC06_013_jr_80140608.c new file mode 100644 index 000000000..45094ad82 --- /dev/null +++ b/src/ov_SC06_013/ov_SC06_013_jr_80140608.c @@ -0,0 +1,2208 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801985D8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017EE64[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80199754; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019AB98; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801985D8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EBA0)(); +extern s16 (*D_8017EBA4)(); +extern M2C_UNK (*D_8017EBAC)(); +extern s32 (*D_8017EBB0)(); +extern s32 D_80199750; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801985DC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017EEF8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801823DC; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017EF10; +extern M2C_UNK D_8017EF18; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017EF20; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017EF3C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017EF48[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017EF5C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017EFAC[]; +extern s16 D_8017EFDC[]; +extern s16 D_8017F03C[]; +extern s16 D_8017F044[]; +extern s16 D_8017F064[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017F09C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017F0F4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017F13C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F144[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F14C[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F154[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017F0FC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017F11C; +extern void func_801321B0(int param_1); +extern int D_8017F12C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801997C0; +extern s32 D_801997C4[]; +extern int D_801997C8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F160; +extern u8 D_8017F15C; +extern s16 *D_8017F164; +extern u8 D_8017F168; +extern int D_801997C0; +extern u16 D_801997D0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F164; /* holds a pointer value (*(u16**)&D_8017F164) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F178[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F1CC; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F1D0[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F214; +extern u8 D_8017F258; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F29C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F314, D_8017F316, D_8017F318, D_8017F31A, D_8017F31C, D_8017F31E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80199838; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019983C; +extern s8 D_8019983D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019985C; +extern s32 D_80199850; +extern s32 D_80199854; +extern s32 D_80199860; +extern void func_8013CABC(void); +extern s32 D_80199858; +extern void func_8013CAE8(void); +extern s32 D_80199888; +extern s32 D_8019988C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80199868; +extern s32 D_8019986C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019AB92; +extern u8 D_8019AC06; +extern u8 D_8019AABA; +extern u8 D_8019AB74; +extern u8 D_8019AA98; +extern u8 D_8019AAB9; +extern s32 D_8019AB78; +extern void func_8013D330(void); +extern void *D_80199840; +extern void *D_80199844; +extern void *D_80199848; +extern s32 D_80199870; +extern s32 D_80199874; +extern s32 D_80199878; +extern s32 D_8019AAEC[]; +extern u8 D_8017F40C[]; +extern u8 D_8017F4B4[]; +extern u8 D_8017F364[]; +extern u8 D_8017F460[]; +extern u8 D_8017F4E0[]; +extern u8 D_8017F3B8[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019984C; +extern s32 D_8019987C; +extern s32 D_80199880; +extern s32 D_80199884; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80199864; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017FF6C; +extern s32 D_80115188; +extern s16 D_8017FF44; +extern s16 D_8017FF46; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017FF48; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FC24; +extern u8 *D_8017FC28; +extern u8 *D_8017FC2C; +extern u8 *D_8017FC30; +extern u8 *D_8017FC34; +extern u16 *D_8017FC38[]; +extern u16 *D_8017FC40[]; +extern u16 *D_8017FC60[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FC24; + iVar2 = func_80028D58(); + puVar3 = D_8017FC38[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FC28; + iVar2 = func_80028DE0(); + puVar3 = D_8017FC38[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FC2C + 0x18) = *D_8017FC40[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FC30 + 0x18) = *D_8017FC40[iVar2]; + + puVar1 = D_8017FC34; + iVar2 = func_80028D9C(); + puVar3 = D_8017FC60[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017FB60; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017FB60); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017FB70; +extern char *D_8017FB90; +extern char *D_8017FB94; +extern char *D_8017FB98; +extern char *D_8017FB9C; +extern char *D_8017FBA0; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017FB70); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FB90; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FB94; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FB98; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FB9C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FBA0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017FA2A; +extern unsigned short D_8017FA2E; +extern unsigned short D_8017FA32; +extern unsigned short D_8017FA36; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017FA2A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FA2E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FA32; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017FA36; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017FFC0[])(void); + +void func_80141788(void) +{ + D_8017FFC0[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017FFCC[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FFCC[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017FF44; +extern s16 D_8017FF46; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017FBE4; + extern u8 D_8017FBFC; + extern u8 D_8017FC70; + extern u8 D_8017FC78; + extern void *D_80199898; + extern void *D_8019989C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80199898 = &D_8017FBE4; + D_8019989C = &D_8017FC70; + } else { + D_80199898 = &D_8017FBFC; + D_8019989C = &D_8017FC78; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017FF44 = 0xE; + D_8017FF46 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017FF48: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017FF48; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017FF48); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017FF20; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017FF20 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FFF0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FFF0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + + +void func_801425CC(void *a0) { + + extern void (*D_80180000[])(void); + D_80180000[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FFE4; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FFE4); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180014[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180014[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180030[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180030[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180200[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180200[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801802B8[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801802B8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80198F68; +extern u8 D_801998A0; +extern u8 D_801998A1; +extern u8 D_801998A2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80198F68; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801998A0 = mul * (local.b[0] >> 4); + D_801998A1 = mul * (local.b[1] >> 4); + D_801998A2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80180008; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80180008); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180024[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80180024); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801801F0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801801F0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80180210[]; +extern unsigned char D_80180270[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80180210); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80180270); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80198F64; +extern u8 D_801998A0; +extern u8 D_801998A4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80198F64, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801998A0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801998A0, 0x10); + memcpy(&D_801998A4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_801803C8[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801803C8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801804F0[])(void); + +void func_80143B30(void *a0) { + D_801804F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801804FC[])(void); + +void func_80143C38(void *a0) { + D_801804FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80180504[])(void); + +void func_80143C98(void *a0) { + D_80180504[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80143D28); + + +extern void (*D_8018054C[])(void); + +void func_80143E68(void *a0) { + D_8018054C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80180560[])(void); + +void func_80144054(void *a0) { + D_80180560[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180568[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180568[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801804E4; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801804E4, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801804F8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801804F8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801804F8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018050C; +extern u8 D_80180518; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018050C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80180518); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801804E4; +extern u8 D_80180554; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801804E4, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180554, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80180570[])(void); + +void func_801449C8(void *a0) { + D_80180570[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180578[])(void); + +void func_80144A2C(void *a0) { + D_80180578[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c b/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c index 2c7155634..5941155df 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80180F88; -extern u8 *D_80180F8C; -extern u8 *D_80180F90; -extern u8 *D_80180F94; -extern u8 *D_80180F98; -extern u16 *D_80180F9C[]; -extern u16 *D_80180FA4[]; -extern u16 *D_80180FC4[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80180F88; - iVar2 = func_80028D58(); - puVar3 = D_80180F9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80180F8C; - iVar2 = func_80028DE0(); - puVar3 = D_80180F9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80180F90 + 0x18) = *D_80180FA4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80180F94 + 0x18) = *D_80180FA4[iVar2]; - - puVar1 = D_80180F98; - iVar2 = func_80028D9C(); - puVar3 = D_80180FC4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80180EC4; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80180EC4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80180ED4; -extern char *D_80180EF4; -extern char *D_80180EF8; -extern char *D_80180EFC; -extern char *D_80180F00; -extern char *D_80180F04; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80180ED4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80180EF4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180EF8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180EFC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180F00; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80180F04; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80180D8E; -extern unsigned short D_80180D92; -extern unsigned short D_80180D96; -extern unsigned short D_80180D9A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80180D8E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80180D92; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180D96; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80180D9A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80181324[])(void); - -void func_80141788(void) -{ - D_80181324[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80181330[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80181330[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801812A8; -extern s16 D_801812AA; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80180F48; - extern u8 D_80180F60; - extern u8 D_80180FD4; - extern u8 D_80180FDC; - extern void *D_801A0288; - extern void *D_801A028C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A0288 = &D_80180F48; - D_801A028C = &D_80180FD4; - } else { - D_801A0288 = &D_80180F60; - D_801A028C = &D_80180FDC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801812A8 = 0xE; - D_801812AA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801812AC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801812AC; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801812AC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80181284; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80181284 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80181354[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80181354[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80181364[])(void); - -void func_801425CC(void *a0) { - D_80181364[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80181348; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80181348); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181378[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181378[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181394[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181394[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80181564[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80181564[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018161C[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018161C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019F958; -extern u8 D_801A0290; -extern u8 D_801A0291; -extern u8 D_801A0292; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019F958; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A0290 = mul * (local.b[0] >> 4); - D_801A0291 = mul * (local.b[1] >> 4); - D_801A0292 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018136C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018136C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181388[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181388); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80181554[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80181554[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80181574[]; -extern unsigned char D_801815D4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181574); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801815D4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019F954; -extern u8 D_801A0290; -extern u8 D_801A0294; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019F954, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0290); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A0290, 0x10); - memcpy(&D_801A0294, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018172C[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018172C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80181854[])(void); - -void func_80143B30(void *a0) { - D_80181854[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80181860[])(void); - -void func_80143C38(void *a0) { - D_80181860[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80181868[])(void); - -void func_80143C98(void *a0) { - D_80181868[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80143D28); - - -extern void (*D_801818B0[])(void); - -void func_80143E68(void *a0) { - D_801818B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801818C4[])(void); - -void func_80144054(void *a0) { - D_801818C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801818CC[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801818CC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80181848; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80181848, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018185C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018185C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018185C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80181870; -extern u8 D_8018187C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181870); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018187C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80181848; -extern u8 D_801818B8; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80181848, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801818B8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801818D4[])(void); - -void func_801449C8(void *a0) { - D_801818D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801818DC[])(void); - -void func_80144A2C(void *a0) { - D_801818DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_014/ov_SC06_014_jr_80140608.c b/src/ov_SC06_014/ov_SC06_014_jr_80140608.c new file mode 100644 index 000000000..f470843ed --- /dev/null +++ b/src/ov_SC06_014/ov_SC06_014_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019EFC8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801801C8[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A0144; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A15B0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019EFC8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017FF04)(); +extern s16 (*D_8017FF08)(); +extern M2C_UNK (*D_8017FF10)(); +extern s32 (*D_8017FF14)(); +extern s32 D_801A0140; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019EFCC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018025C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80183740; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80180274; +extern M2C_UNK D_8018027C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80180284; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801802A0[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801802AC[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801802C0[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80180310[]; +extern s16 D_80180340[]; +extern s16 D_801803A0[]; +extern s16 D_801803A8[]; +extern s16 D_801803C8[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80180400[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80180458[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801804A0[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801804A8[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801804B0[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801804B8[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80180460; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80180480; +extern void func_801321B0(int param_1); +extern int D_80180490; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A01B0; +extern s32 D_801A01B4[]; +extern int D_801A01B8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801804C4; +extern u8 D_801804C0; +extern s16 *D_801804C8; +extern u8 D_801804CC; +extern int D_801A01B0; +extern u16 D_801A01C0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801804C8; /* holds a pointer value (*(u16**)&D_801804C8) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801804DC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80180530; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80180534[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80180578; +extern u8 D_801805BC; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80180600[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80180678, D_8018067A, D_8018067C, D_8018067E, D_80180680, D_80180682; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A0228; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A022C; +extern s8 D_801A022D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A024C; +extern s32 D_801A0240; +extern s32 D_801A0244; +extern s32 D_801A0250; +extern void func_8013CABC(void); +extern s32 D_801A0248; +extern void func_8013CAE8(void); +extern s32 D_801A0278; +extern s32 D_801A027C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A0258; +extern s32 D_801A025C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A15AA; +extern u8 D_801A161E; +extern u8 D_801A14D2; +extern u8 D_801A158C; +extern u8 D_801A14B0; +extern u8 D_801A14D1; +extern s32 D_801A1590; +extern void func_8013D330(void); +extern void *D_801A0230; +extern void *D_801A0234; +extern void *D_801A0238; +extern s32 D_801A0260; +extern s32 D_801A0264; +extern s32 D_801A0268; +extern s32 D_801A1504[]; +extern u8 D_80180770[]; +extern u8 D_80180818[]; +extern u8 D_801806C8[]; +extern u8 D_801807C4[]; +extern u8 D_80180844[]; +extern u8 D_8018071C[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A023C; +extern s32 D_801A026C; +extern s32 D_801A0270; +extern s32 D_801A0274; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A0254; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801812D0; +extern s32 D_80115188; +extern s16 D_801812A8; +extern s16 D_801812AA; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801812AC; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80180F88; +extern u8 *D_80180F8C; +extern u8 *D_80180F90; +extern u8 *D_80180F94; +extern u8 *D_80180F98; +extern u16 *D_80180F9C[]; +extern u16 *D_80180FA4[]; +extern u16 *D_80180FC4[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80180F88; + iVar2 = func_80028D58(); + puVar3 = D_80180F9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80180F8C; + iVar2 = func_80028DE0(); + puVar3 = D_80180F9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80180F90 + 0x18) = *D_80180FA4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80180F94 + 0x18) = *D_80180FA4[iVar2]; + + puVar1 = D_80180F98; + iVar2 = func_80028D9C(); + puVar3 = D_80180FC4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80180EC4; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80180EC4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80180ED4; +extern char *D_80180EF4; +extern char *D_80180EF8; +extern char *D_80180EFC; +extern char *D_80180F00; +extern char *D_80180F04; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80180ED4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80180EF4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180EF8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180EFC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180F00; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80180F04; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80180D8E; +extern unsigned short D_80180D92; +extern unsigned short D_80180D96; +extern unsigned short D_80180D9A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80180D8E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80180D92; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180D96; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80180D9A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80181324[])(void); + +void func_80141788(void) +{ + D_80181324[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80181330[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80181330[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801812A8; +extern s16 D_801812AA; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80180F48; + extern u8 D_80180F60; + extern u8 D_80180FD4; + extern u8 D_80180FDC; + extern void *D_801A0288; + extern void *D_801A028C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A0288 = &D_80180F48; + D_801A028C = &D_80180FD4; + } else { + D_801A0288 = &D_80180F60; + D_801A028C = &D_80180FDC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801812A8 = 0xE; + D_801812AA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801812AC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801812AC; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801812AC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80181284; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80181284 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80181354[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80181354[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80181364[])(void); + +void func_801425CC(void *a0) { + D_80181364[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80181348; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80181348); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181378[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181378[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181394[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181394[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80181564[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80181564[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018161C[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018161C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019F958; +extern u8 D_801A0290; +extern u8 D_801A0291; +extern u8 D_801A0292; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019F958; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A0290 = mul * (local.b[0] >> 4); + D_801A0291 = mul * (local.b[1] >> 4); + D_801A0292 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018136C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018136C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181388[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80181388); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80181554[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80181554[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80181574[]; +extern unsigned char D_801815D4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80181574); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801815D4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019F954; +extern u8 D_801A0290; +extern u8 D_801A0294; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019F954, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A0290); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A0290, 0x10); + memcpy(&D_801A0294, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018172C[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018172C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80181854[])(void); + +void func_80143B30(void *a0) { + D_80181854[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80181860[])(void); + +void func_80143C38(void *a0) { + D_80181860[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80181868[])(void); + +void func_80143C98(void *a0) { + D_80181868[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80143D28); + + +extern void (*D_801818B0[])(void); + +void func_80143E68(void *a0) { + D_801818B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801818C4[])(void); + +void func_80144054(void *a0) { + D_801818C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801818CC[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801818CC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181848; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80181848, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018185C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018185C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018185C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80181870; +extern u8 D_8018187C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80181870); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018187C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80181848; +extern u8 D_801818B8; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80181848, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801818B8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801818D4[])(void); + +void func_801449C8(void *a0) { + D_801818D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801818DC[])(void); + +void func_80144A2C(void *a0) { + D_801818DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c b/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c index c77ad1128..1f5799585 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017FAE0; -extern u8 *D_8017FAE4; -extern u8 *D_8017FAE8; -extern u8 *D_8017FAEC; -extern u8 *D_8017FAF0; -extern u16 *D_8017FAF4[]; -extern u16 *D_8017FAFC[]; -extern u16 *D_8017FB1C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017FAE0; - iVar2 = func_80028D58(); - puVar3 = D_8017FAF4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017FAE4; - iVar2 = func_80028DE0(); - puVar3 = D_8017FAF4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017FAE8 + 0x18) = *D_8017FAFC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017FAEC + 0x18) = *D_8017FAFC[iVar2]; - - puVar1 = D_8017FAF0; - iVar2 = func_80028D9C(); - puVar3 = D_8017FB1C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017FA1C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017FA1C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017FA2C; -extern char *D_8017FA4C; -extern char *D_8017FA50; -extern char *D_8017FA54; -extern char *D_8017FA58; -extern char *D_8017FA5C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017FA2C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017FA4C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA50; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA54; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA58; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017FA5C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017F8E6; -extern unsigned short D_8017F8EA; -extern unsigned short D_8017F8EE; -extern unsigned short D_8017F8F2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F8E6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F8EA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F8EE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F8F2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017FE7C[])(void); - -void func_80141788(void) -{ - D_8017FE7C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017FE88[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FE88[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017FE00; -extern s16 D_8017FE02; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017FAA0; - extern u8 D_8017FAB8; - extern u8 D_8017FB2C; - extern u8 D_8017FB34; - extern void *D_80193668; - extern void *D_8019366C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_80193668 = &D_8017FAA0; - D_8019366C = &D_8017FB2C; - } else { - D_80193668 = &D_8017FAB8; - D_8019366C = &D_8017FB34; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017FE00 = 0xE; - D_8017FE02 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017FE04: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017FE04; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017FE04); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017FDDC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017FDDC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FEAC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FEAC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017FEBC[])(void); - -void func_801425CC(void *a0) { - D_8017FEBC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017FEA0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FEA0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FED0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FED0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017FEEC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017FEEC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801800BC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801800BC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80180174[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80180174[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80192D38; -extern u8 D_80193670; -extern u8 D_80193671; -extern u8 D_80193672; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80192D38; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_80193670 = mul * (local.b[0] >> 4); - D_80193671 = mul * (local.b[1] >> 4); - D_80193672 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017FEC4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FEC4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017FEE0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FEE0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801800AC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801800AC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801800CC[]; -extern unsigned char D_8018012C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801800CC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018012C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80192D34; -extern u8 D_80193670; -extern u8 D_80193674; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80192D34, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_80193670); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_80193670, 0x10); - memcpy(&D_80193674, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80180284[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80180284[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801803AC[])(void); - -void func_80143B30(void *a0) { - D_801803AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801803B8[])(void); - -void func_80143C38(void *a0) { - D_801803B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801803C0[])(void); - -void func_80143C98(void *a0) { - D_801803C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80143D28); - - -extern void (*D_80180408[])(void); - -void func_80143E68(void *a0) { - D_80180408[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018041C[])(void); - -void func_80144054(void *a0) { - D_8018041C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80180424[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80180424[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801803A0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801803A0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801803B4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801803B4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801803B4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801803C8; -extern u8 D_801803D4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801803C8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801803D4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801803A0; -extern u8 D_80180410; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801803A0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180410, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018042C[])(void); - -void func_801449C8(void *a0) { - D_8018042C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80180434[])(void); - -void func_80144A2C(void *a0) { - D_80180434[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_015/ov_SC06_015_jr_80140608.c b/src/ov_SC06_015/ov_SC06_015_jr_80140608.c new file mode 100644 index 000000000..5d1b2b49e --- /dev/null +++ b/src/ov_SC06_015/ov_SC06_015_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801923A8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017ED20[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_80193524; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_80194990; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801923A8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017EA5C)(); +extern s16 (*D_8017EA60)(); +extern M2C_UNK (*D_8017EA68)(); +extern s32 (*D_8017EA6C)(); +extern s32 D_80193520; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801923AC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017EDB4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80182298; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017EDCC; +extern M2C_UNK D_8017EDD4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017EDDC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017EDF8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017EE04[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017EE18[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017EE68[]; +extern s16 D_8017EE98[]; +extern s16 D_8017EEF8[]; +extern s16 D_8017EF00[]; +extern s16 D_8017EF20[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017EF58[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017EFB0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017EFF8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017F000[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017F008[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017F010[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017EFB8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017EFD8; +extern void func_801321B0(int param_1); +extern int D_8017EFE8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80193590; +extern s32 D_80193594[]; +extern int D_80193598; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017F01C; +extern u8 D_8017F018; +extern s16 *D_8017F020; +extern u8 D_8017F024; +extern int D_80193590; +extern u16 D_801935A0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017F020; /* holds a pointer value (*(u16**)&D_8017F020) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017F034[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017F088; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017F08C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017F0D0; +extern u8 D_8017F114; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017F158[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017F1D0, D_8017F1D2, D_8017F1D4, D_8017F1D6, D_8017F1D8, D_8017F1DA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80193608; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019360C; +extern s8 D_8019360D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019362C; +extern s32 D_80193620; +extern s32 D_80193624; +extern s32 D_80193630; +extern void func_8013CABC(void); +extern s32 D_80193628; +extern void func_8013CAE8(void); +extern s32 D_80193658; +extern s32 D_8019365C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_80193638; +extern s32 D_8019363C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019498A; +extern u8 D_801949FE; +extern u8 D_801948B2; +extern u8 D_8019496C; +extern u8 D_80194890; +extern u8 D_801948B1; +extern s32 D_80194970; +extern void func_8013D330(void); +extern void *D_80193610; +extern void *D_80193614; +extern void *D_80193618; +extern s32 D_80193640; +extern s32 D_80193644; +extern s32 D_80193648; +extern s32 D_801948E4[]; +extern u8 D_8017F2C8[]; +extern u8 D_8017F370[]; +extern u8 D_8017F220[]; +extern u8 D_8017F31C[]; +extern u8 D_8017F39C[]; +extern u8 D_8017F274[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019361C; +extern s32 D_8019364C; +extern s32 D_80193650; +extern s32 D_80193654; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_80193634; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017FE28; +extern s32 D_80115188; +extern s16 D_8017FE00; +extern s16 D_8017FE02; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017FE04; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017FAE0; +extern u8 *D_8017FAE4; +extern u8 *D_8017FAE8; +extern u8 *D_8017FAEC; +extern u8 *D_8017FAF0; +extern u16 *D_8017FAF4[]; +extern u16 *D_8017FAFC[]; +extern u16 *D_8017FB1C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017FAE0; + iVar2 = func_80028D58(); + puVar3 = D_8017FAF4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017FAE4; + iVar2 = func_80028DE0(); + puVar3 = D_8017FAF4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017FAE8 + 0x18) = *D_8017FAFC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017FAEC + 0x18) = *D_8017FAFC[iVar2]; + + puVar1 = D_8017FAF0; + iVar2 = func_80028D9C(); + puVar3 = D_8017FB1C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017FA1C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017FA1C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017FA2C; +extern char *D_8017FA4C; +extern char *D_8017FA50; +extern char *D_8017FA54; +extern char *D_8017FA58; +extern char *D_8017FA5C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017FA2C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017FA4C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA50; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA54; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA58; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017FA5C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017F8E6; +extern unsigned short D_8017F8EA; +extern unsigned short D_8017F8EE; +extern unsigned short D_8017F8F2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F8E6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F8EA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F8EE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F8F2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017FE7C[])(void); + +void func_80141788(void) +{ + D_8017FE7C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017FE88[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FE88[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017FE00; +extern s16 D_8017FE02; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017FAA0; + extern u8 D_8017FAB8; + extern u8 D_8017FB2C; + extern u8 D_8017FB34; + extern void *D_80193668; + extern void *D_8019366C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_80193668 = &D_8017FAA0; + D_8019366C = &D_8017FB2C; + } else { + D_80193668 = &D_8017FAB8; + D_8019366C = &D_8017FB34; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017FE00 = 0xE; + D_8017FE02 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017FE04: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017FE04; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017FE04); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017FDDC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017FDDC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FEAC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FEAC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017FEBC[])(void); + +void func_801425CC(void *a0) { + D_8017FEBC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017FEA0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FEA0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FED0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FED0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017FEEC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017FEEC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801800BC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801800BC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80180174[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80180174[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80192D38; +extern u8 D_80193670; +extern u8 D_80193671; +extern u8 D_80193672; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80192D38; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_80193670 = mul * (local.b[0] >> 4); + D_80193671 = mul * (local.b[1] >> 4); + D_80193672 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017FEC4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FEC4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017FEE0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FEE0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801800AC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801800AC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801800CC[]; +extern unsigned char D_8018012C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801800CC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018012C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80192D34; +extern u8 D_80193670; +extern u8 D_80193674; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80192D34, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_80193670); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_80193670, 0x10); + memcpy(&D_80193674, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80180284[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80180284[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801803AC[])(void); + +void func_80143B30(void *a0) { + D_801803AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801803B8[])(void); + +void func_80143C38(void *a0) { + D_801803B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801803C0[])(void); + +void func_80143C98(void *a0) { + D_801803C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80143D28); + + +extern void (*D_80180408[])(void); + +void func_80143E68(void *a0) { + D_80180408[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018041C[])(void); + +void func_80144054(void *a0) { + D_8018041C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80180424[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80180424[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801803A0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801803A0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801803B4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801803B4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801803B4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801803C8; +extern u8 D_801803D4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801803C8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801803D4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801803A0; +extern u8 D_80180410; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801803A0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180410, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018042C[])(void); + +void func_801449C8(void *a0) { + D_8018042C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80180434[])(void); + +void func_80144A2C(void *a0) { + D_80180434[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c b/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c index e30200ad2..e488a4cfd 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185EF0; -extern u8 *D_80185EF4; -extern u8 *D_80185EF8; -extern u8 *D_80185EFC; -extern u8 *D_80185F00; -extern u16 *D_80185F04[]; -extern u16 *D_80185F0C[]; -extern u16 *D_80185F2C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185EF0; - iVar2 = func_80028D58(); - puVar3 = D_80185F04[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185EF4; - iVar2 = func_80028DE0(); - puVar3 = D_80185F04[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185EF8 + 0x18) = *D_80185F0C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185EFC + 0x18) = *D_80185F0C[iVar2]; - - puVar1 = D_80185F00; - iVar2 = func_80028D9C(); - puVar3 = D_80185F2C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185E2C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185E2C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185E3C; -extern char *D_80185E5C; -extern char *D_80185E60; -extern char *D_80185E64; -extern char *D_80185E68; -extern char *D_80185E6C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185E3C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185E5C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185E60; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185E64; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185E68; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185E6C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80185CF6; -extern unsigned short D_80185CFA; -extern unsigned short D_80185CFE; -extern unsigned short D_80185D02; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80185CF6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185CFA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185CFE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185D02; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018628C[])(void); - -void func_80141788(void) -{ - D_8018628C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186298[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186298[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80186210; -extern s16 D_80186212; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185EB0; - extern u8 D_80185EC8; - extern u8 D_80185F3C; - extern u8 D_80185F44; - extern void *D_8019E438; - extern void *D_8019E43C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019E438 = &D_80185EB0; - D_8019E43C = &D_80185F3C; - } else { - D_8019E438 = &D_80185EC8; - D_8019E43C = &D_80185F44; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80186210 = 0xE; - D_80186212 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186214: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186214; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186214); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801861EC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801861EC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801862BC[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801862BC[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801862CC[])(void); - -void func_801425CC(void *a0) { - D_801862CC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801862B0; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801862B0); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801862E0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801862E0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801862FC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801862FC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801864CC[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801864CC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186584[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186584[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019D980; -extern u8 D_8019E440; -extern u8 D_8019E441; -extern u8 D_8019E442; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019D980; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019E440 = mul * (local.b[0] >> 4); - D_8019E441 = mul * (local.b[1] >> 4); - D_8019E442 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801862D4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801862D4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801862F0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801862F0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801864BC[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801864BC[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801864DC[]; -extern unsigned char D_8018653C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801864DC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018653C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019D97C; -extern u8 D_8019E440; -extern u8 D_8019E444; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019D97C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019E440); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019E440, 0x10); - memcpy(&D_8019E444, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80186694[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80186694[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801867BC[])(void); - -void func_80143B30(void *a0) { - D_801867BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801867C8[])(void); - -void func_80143C38(void *a0) { - D_801867C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801867D0[])(void); - -void func_80143C98(void *a0) { - D_801867D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80143D28); - - -extern void (*D_80186818[])(void); - -void func_80143E68(void *a0) { - D_80186818[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018682C[])(void); - -void func_80144054(void *a0) { - D_8018682C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80186834[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80186834[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801867B0; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801867B0, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801867C4; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801867C4 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801867C4 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801867D8; -extern u8 D_801867E4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801867D8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801867E4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801867B0; -extern u8 D_80186820; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801867B0, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80186820, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018683C[])(void); - -void func_801449C8(void *a0) { - D_8018683C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186844[])(void); - -void func_80144A2C(void *a0) { - D_80186844[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_016/ov_SC06_016_jr_80140608.c b/src/ov_SC06_016/ov_SC06_016_jr_80140608.c new file mode 100644 index 000000000..ea126f632 --- /dev/null +++ b/src/ov_SC06_016/ov_SC06_016_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019CFF0; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80185130[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019E2F4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A0200; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019CFF0; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184E6C)(); +extern s16 (*D_80184E70)(); +extern M2C_UNK (*D_80184E78)(); +extern s32 (*D_80184E7C)(); +extern s32 D_8019E2F0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019CFF4; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801851C4; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801886A8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801851DC; +extern M2C_UNK D_801851E4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801851EC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185208[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185214[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185228[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185278[]; +extern s16 D_801852A8[]; +extern s16 D_80185308[]; +extern s16 D_80185310[]; +extern s16 D_80185330[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80185368[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801853C0[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185408[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80185410[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80185418[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80185420[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801853C8; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801853E8; +extern void func_801321B0(int param_1); +extern int D_801853F8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019E360; +extern s32 D_8019E364[]; +extern int D_8019E368; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018542C; +extern u8 D_80185428; +extern s16 *D_80185430; +extern u8 D_80185434; +extern int D_8019E360; +extern u16 D_8019E370; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80185430; /* holds a pointer value (*(u16**)&D_80185430) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80185444[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185498; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018549C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801854E0; +extern u8 D_80185524; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80185568[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801855E0, D_801855E2, D_801855E4, D_801855E6, D_801855E8, D_801855EA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019E3D8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019E3DC; +extern s8 D_8019E3DD; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019E3FC; +extern s32 D_8019E3F0; +extern s32 D_8019E3F4; +extern s32 D_8019E400; +extern void func_8013CABC(void); +extern s32 D_8019E3F8; +extern void func_8013CAE8(void); +extern s32 D_8019E428; +extern s32 D_8019E42C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019E408; +extern s32 D_8019E40C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A01FA; +extern u8 D_801A026E; +extern u8 D_801A0122; +extern u8 D_801A01DC; +extern u8 D_801A0100; +extern u8 D_801A0121; +extern s32 D_801A01E0; +extern void func_8013D330(void); +extern void *D_8019E3E0; +extern void *D_8019E3E4; +extern void *D_8019E3E8; +extern s32 D_8019E410; +extern s32 D_8019E414; +extern s32 D_8019E418; +extern s32 D_801A0154[]; +extern u8 D_801856D8[]; +extern u8 D_80185780[]; +extern u8 D_80185630[]; +extern u8 D_8018572C[]; +extern u8 D_801857AC[]; +extern u8 D_80185684[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019E3EC; +extern s32 D_8019E41C; +extern s32 D_8019E420; +extern s32 D_8019E424; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019E404; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80186238; +extern s32 D_80115188; +extern s16 D_80186210; +extern s16 D_80186212; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186214; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185EF0; +extern u8 *D_80185EF4; +extern u8 *D_80185EF8; +extern u8 *D_80185EFC; +extern u8 *D_80185F00; +extern u16 *D_80185F04[]; +extern u16 *D_80185F0C[]; +extern u16 *D_80185F2C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185EF0; + iVar2 = func_80028D58(); + puVar3 = D_80185F04[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185EF4; + iVar2 = func_80028DE0(); + puVar3 = D_80185F04[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185EF8 + 0x18) = *D_80185F0C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185EFC + 0x18) = *D_80185F0C[iVar2]; + + puVar1 = D_80185F00; + iVar2 = func_80028D9C(); + puVar3 = D_80185F2C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185E2C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185E2C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185E3C; +extern char *D_80185E5C; +extern char *D_80185E60; +extern char *D_80185E64; +extern char *D_80185E68; +extern char *D_80185E6C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185E3C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185E5C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185E60; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185E64; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185E68; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185E6C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80185CF6; +extern unsigned short D_80185CFA; +extern unsigned short D_80185CFE; +extern unsigned short D_80185D02; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80185CF6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185CFA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185CFE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185D02; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018628C[])(void); + +void func_80141788(void) +{ + D_8018628C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186298[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186298[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80186210; +extern s16 D_80186212; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185EB0; + extern u8 D_80185EC8; + extern u8 D_80185F3C; + extern u8 D_80185F44; + extern void *D_8019E438; + extern void *D_8019E43C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019E438 = &D_80185EB0; + D_8019E43C = &D_80185F3C; + } else { + D_8019E438 = &D_80185EC8; + D_8019E43C = &D_80185F44; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80186210 = 0xE; + D_80186212 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186214: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186214; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186214); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801861EC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801861EC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801862BC[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801862BC[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801862CC[])(void); + +void func_801425CC(void *a0) { + D_801862CC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801862B0; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801862B0); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801862E0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801862E0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801862FC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801862FC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801864CC[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801864CC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186584[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186584[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019D980; +extern u8 D_8019E440; +extern u8 D_8019E441; +extern u8 D_8019E442; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019D980; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019E440 = mul * (local.b[0] >> 4); + D_8019E441 = mul * (local.b[1] >> 4); + D_8019E442 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801862D4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801862D4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801862F0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801862F0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801864BC[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801864BC[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801864DC[]; +extern unsigned char D_8018653C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801864DC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018653C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019D97C; +extern u8 D_8019E440; +extern u8 D_8019E444; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019D97C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019E440); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019E440, 0x10); + memcpy(&D_8019E444, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80186694[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80186694[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801867BC[])(void); + +void func_80143B30(void *a0) { + D_801867BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801867C8[])(void); + +void func_80143C38(void *a0) { + D_801867C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801867D0[])(void); + +void func_80143C98(void *a0) { + D_801867D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80143D28); + + +extern void (*D_80186818[])(void); + +void func_80143E68(void *a0) { + D_80186818[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018682C[])(void); + +void func_80144054(void *a0) { + D_8018682C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80186834[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80186834[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801867B0; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801867B0, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801867C4; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801867C4 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801867C4 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801867D8; +extern u8 D_801867E4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801867D8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801867E4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801867B0; +extern u8 D_80186820; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801867B0, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80186820, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018683C[])(void); + +void func_801449C8(void *a0) { + D_8018683C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186844[])(void); + +void func_80144A2C(void *a0) { + D_80186844[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c b/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c index 08c0e47c5..9420cd66d 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8019462C; -extern u8 *D_80194630; -extern u8 *D_80194634; -extern u8 *D_80194638; -extern u8 *D_8019463C; -extern u16 *D_80194640[]; -extern u16 *D_80194648[]; -extern u16 *D_80194668[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8019462C; - iVar2 = func_80028D58(); - puVar3 = D_80194640[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80194630; - iVar2 = func_80028DE0(); - puVar3 = D_80194640[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80194634 + 0x18) = *D_80194648[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80194638 + 0x18) = *D_80194648[iVar2]; - - puVar1 = D_8019463C; - iVar2 = func_80028D9C(); - puVar3 = D_80194668[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80194568; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80194568); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80194578; -extern char *D_80194598; -extern char *D_8019459C; -extern char *D_801945A0; -extern char *D_801945A4; -extern char *D_801945A8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80194578); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80194598; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8019459C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801945A0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801945A4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801945A8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80194432; -extern unsigned short D_80194436; -extern unsigned short D_8019443A; -extern unsigned short D_8019443E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80194432; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80194436; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019443A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019443E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_801949C8[])(void); - -void func_80141788(void) -{ - D_801949C8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_801949D4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801949D4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8019494C; -extern s16 D_8019494E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_801945EC; - extern u8 D_80194604; - extern u8 D_80194678; - extern u8 D_80194680; - extern void *D_801D3D20; - extern void *D_801D3D24; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801D3D20 = &D_801945EC; - D_801D3D24 = &D_80194678; - } else { - D_801D3D20 = &D_80194604; - D_801D3D24 = &D_80194680; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8019494C = 0xE; - D_8019494E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80194950: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80194950; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80194950); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80194928; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80194928 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801949F8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801949F8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80194A08[])(void); - -void func_801425CC(void *a0) { - D_80194A08[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801949EC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801949EC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80194A1C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80194A1C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80194A38[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80194A38[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80194C08[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80194C08[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80194CC0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80194CC0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801D3210; -extern u8 D_801D3D28; -extern u8 D_801D3D29; -extern u8 D_801D3D2A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801D3210; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801D3D28 = mul * (local.b[0] >> 4); - D_801D3D29 = mul * (local.b[1] >> 4); - D_801D3D2A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80194A10; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80194A10); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80194A2C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80194A2C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80194BF8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80194BF8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80194C18[]; -extern unsigned char D_80194C78[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80194C18); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80194C78); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801D320C; -extern u8 D_801D3D28; -extern u8 D_801D3D2C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801D320C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801D3D28); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801D3D28, 0x10); - memcpy(&D_801D3D2C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80194DD0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80194DD0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80194EF8[])(void); - -void func_80143B30(void *a0) { - D_80194EF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80194F04[])(void); - -void func_80143C38(void *a0) { - D_80194F04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80194F0C[])(void); - -void func_80143C98(void *a0) { - D_80194F0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80143D28); - - -extern void (*D_80194F54[])(void); - -void func_80143E68(void *a0) { - D_80194F54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80194F68[])(void); - -void func_80144054(void *a0) { - D_80194F68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80194F70[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80194F70[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80194EEC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80194EEC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80194F00; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80194F00 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80194F00 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80194F14; -extern u8 D_80194F20; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80194F14); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80194F20); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80194EEC; -extern u8 D_80194F5C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80194EEC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80194F5C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80194F78[])(void); - -void func_801449C8(void *a0) { - D_80194F78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80194F80[])(void); - -void func_80144A2C(void *a0) { - D_80194F80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_018/ov_SC06_018_jr_80140608.c b/src/ov_SC06_018/ov_SC06_018_jr_80140608.c new file mode 100644 index 000000000..a077af6ac --- /dev/null +++ b/src/ov_SC06_018/ov_SC06_018_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801D2880; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8019386C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801D3BDC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D5B30; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801D2880; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801935A8)(); +extern s16 (*D_801935AC)(); +extern M2C_UNK (*D_801935B4)(); +extern s32 (*D_801935B8)(); +extern s32 D_801D3BD8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801D2884; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80193900; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80196DE4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80193918; +extern M2C_UNK D_80193920; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80193928; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80193944[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80193950[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80193964[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_801939B4[]; +extern s16 D_801939E4[]; +extern s16 D_80193A44[]; +extern s16 D_80193A4C[]; +extern s16 D_80193A6C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80193AA4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80193AFC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80193B44[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80193B4C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80193B54[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80193B5C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80193B04; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80193B24; +extern void func_801321B0(int param_1); +extern int D_80193B34; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801D3C48; +extern s32 D_801D3C4C[]; +extern int D_801D3C50; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80193B68; +extern u8 D_80193B64; +extern s16 *D_80193B6C; +extern u8 D_80193B70; +extern int D_801D3C48; +extern u16 D_801D3C58; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80193B6C; /* holds a pointer value (*(u16**)&D_80193B6C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80193B80[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80193BD4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80193BD8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80193C1C; +extern u8 D_80193C60; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80193CA4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80193D1C, D_80193D1E, D_80193D20, D_80193D22, D_80193D24, D_80193D26; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801D3CC0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801D3CC4; +extern s8 D_801D3CC5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801D3CE4; +extern s32 D_801D3CD8; +extern s32 D_801D3CDC; +extern s32 D_801D3CE8; +extern void func_8013CABC(void); +extern s32 D_801D3CE0; +extern void func_8013CAE8(void); +extern s32 D_801D3D10; +extern s32 D_801D3D14; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801D3CF0; +extern s32 D_801D3CF4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D5B2A; +extern u8 D_801D5B9E; +extern u8 D_801D5A52; +extern u8 D_801D5B0C; +extern u8 D_801D5A30; +extern u8 D_801D5A51; +extern s32 D_801D5B10; +extern void func_8013D330(void); +extern void *D_801D3CC8; +extern void *D_801D3CCC; +extern void *D_801D3CD0; +extern s32 D_801D3CF8; +extern s32 D_801D3CFC; +extern s32 D_801D3D00; +extern s32 D_801D5A84[]; +extern u8 D_80193E14[]; +extern u8 D_80193EBC[]; +extern u8 D_80193D6C[]; +extern u8 D_80193E68[]; +extern u8 D_80193EE8[]; +extern u8 D_80193DC0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801D3CD4; +extern s32 D_801D3D04; +extern s32 D_801D3D08; +extern s32 D_801D3D0C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801D3CEC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80194974; +extern s32 D_80115188; +extern s16 D_8019494C; +extern s16 D_8019494E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80194950; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8019462C; +extern u8 *D_80194630; +extern u8 *D_80194634; +extern u8 *D_80194638; +extern u8 *D_8019463C; +extern u16 *D_80194640[]; +extern u16 *D_80194648[]; +extern u16 *D_80194668[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8019462C; + iVar2 = func_80028D58(); + puVar3 = D_80194640[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80194630; + iVar2 = func_80028DE0(); + puVar3 = D_80194640[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80194634 + 0x18) = *D_80194648[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80194638 + 0x18) = *D_80194648[iVar2]; + + puVar1 = D_8019463C; + iVar2 = func_80028D9C(); + puVar3 = D_80194668[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80194568; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80194568); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80194578; +extern char *D_80194598; +extern char *D_8019459C; +extern char *D_801945A0; +extern char *D_801945A4; +extern char *D_801945A8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80194578); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80194598; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8019459C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801945A0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801945A4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801945A8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80194432; +extern unsigned short D_80194436; +extern unsigned short D_8019443A; +extern unsigned short D_8019443E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80194432; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80194436; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019443A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019443E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_801949C8[])(void); + +void func_80141788(void) +{ + D_801949C8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_801949D4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801949D4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8019494C; +extern s16 D_8019494E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_801945EC; + extern u8 D_80194604; + extern u8 D_80194678; + extern u8 D_80194680; + extern void *D_801D3D20; + extern void *D_801D3D24; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801D3D20 = &D_801945EC; + D_801D3D24 = &D_80194678; + } else { + D_801D3D20 = &D_80194604; + D_801D3D24 = &D_80194680; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8019494C = 0xE; + D_8019494E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80194950: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80194950; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80194950); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80194928; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80194928 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801949F8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801949F8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80194A08[])(void); + +void func_801425CC(void *a0) { + D_80194A08[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801949EC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801949EC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80194A1C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80194A1C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80194A38[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80194A38[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80194C08[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80194C08[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80194CC0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80194CC0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801D3210; +extern u8 D_801D3D28; +extern u8 D_801D3D29; +extern u8 D_801D3D2A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801D3210; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801D3D28 = mul * (local.b[0] >> 4); + D_801D3D29 = mul * (local.b[1] >> 4); + D_801D3D2A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80194A10; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80194A10); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80194A2C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80194A2C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80194BF8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80194BF8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80194C18[]; +extern unsigned char D_80194C78[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80194C18); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80194C78); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801D320C; +extern u8 D_801D3D28; +extern u8 D_801D3D2C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801D320C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801D3D28); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801D3D28, 0x10); + memcpy(&D_801D3D2C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80194DD0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80194DD0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80194EF8[])(void); + +void func_80143B30(void *a0) { + D_80194EF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80194F04[])(void); + +void func_80143C38(void *a0) { + D_80194F04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80194F0C[])(void); + +void func_80143C98(void *a0) { + D_80194F0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80143D28); + + +extern void (*D_80194F54[])(void); + +void func_80143E68(void *a0) { + D_80194F54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80194F68[])(void); + +void func_80144054(void *a0) { + D_80194F68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80194F70[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80194F70[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80194EEC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80194EEC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80194F00; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80194F00 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80194F00 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80194F14; +extern u8 D_80194F20; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80194F14); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80194F20); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80194EEC; +extern u8 D_80194F5C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80194EEC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80194F5C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80194F78[])(void); + +void func_801449C8(void *a0) { + D_80194F78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80194F80[])(void); + +void func_80144A2C(void *a0) { + D_80194F80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c b/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c index ed1eba959..ea85572c3 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801860B4; -extern u8 *D_801860B8; -extern u8 *D_801860BC; -extern u8 *D_801860C0; -extern u8 *D_801860C4; -extern u16 *D_801860C8[]; -extern u16 *D_801860D0[]; -extern u16 *D_801860F0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801860B4; - iVar2 = func_80028D58(); - puVar3 = D_801860C8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801860B8; - iVar2 = func_80028DE0(); - puVar3 = D_801860C8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801860BC + 0x18) = *D_801860D0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801860C0 + 0x18) = *D_801860D0[iVar2]; - - puVar1 = D_801860C4; - iVar2 = func_80028D9C(); - puVar3 = D_801860F0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185FF0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185FF0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80186000; -extern char *D_80186020; -extern char *D_80186024; -extern char *D_80186028; -extern char *D_8018602C; -extern char *D_80186030; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80186000); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80186020; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186024; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186028; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018602C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80186030; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80185EBA; -extern unsigned short D_80185EBE; -extern unsigned short D_80185EC2; -extern unsigned short D_80185EC6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80185EBA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185EBE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185EC2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185EC6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186450[])(void); - -void func_80141788(void) -{ - D_80186450[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018645C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018645C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801863D4; -extern s16 D_801863D6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80186074; - extern u8 D_8018608C; - extern u8 D_80186100; - extern u8 D_80186108; - extern void *D_801B9538; - extern void *D_801B953C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B9538 = &D_80186074; - D_801B953C = &D_80186100; - } else { - D_801B9538 = &D_8018608C; - D_801B953C = &D_80186108; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801863D4 = 0xE; - D_801863D6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801863D8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801863D8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801863D8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801863B0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801863B0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80186480[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80186480[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80186490[])(void); - -void func_801425CC(void *a0) { - D_80186490[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80186474; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80186474); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801864A4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801864A4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801864C0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801864C0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186690[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186690[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186748[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186748[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B8AF8; -extern u8 D_801B9540; -extern u8 D_801B9541; -extern u8 D_801B9542; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B8AF8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B9540 = mul * (local.b[0] >> 4); - D_801B9541 = mul * (local.b[1] >> 4); - D_801B9542 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80186498; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186498); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801864B4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801864B4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80186680[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80186680[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801866A0[]; -extern unsigned char D_80186700[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801866A0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80186700); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B8AF4; -extern u8 D_801B9540; -extern u8 D_801B9544; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B8AF4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B9540); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B9540, 0x10); - memcpy(&D_801B9544, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80186858[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80186858[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80186980[])(void); - -void func_80143B30(void *a0) { - D_80186980[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018698C[])(void); - -void func_80143C38(void *a0) { - D_8018698C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80186994[])(void); - -void func_80143C98(void *a0) { - D_80186994[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80143D28); - - -extern void (*D_801869DC[])(void); - -void func_80143E68(void *a0) { - D_801869DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801869F0[])(void); - -void func_80144054(void *a0) { - D_801869F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801869F8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801869F8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80186974; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80186974, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80186988; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186988 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186988 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018699C; -extern u8 D_801869A8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018699C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801869A8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80186974; -extern u8 D_801869E4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80186974, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801869E4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186A00[])(void); - -void func_801449C8(void *a0) { - D_80186A00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186A08[])(void); - -void func_80144A2C(void *a0) { - D_80186A08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_020/ov_SC06_020_jr_80140608.c b/src/ov_SC06_020/ov_SC06_020_jr_80140608.c new file mode 100644 index 000000000..2d11ea110 --- /dev/null +++ b/src/ov_SC06_020/ov_SC06_020_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B8168; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801852F4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B93F4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801BA980; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B8168; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80185030)(); +extern s16 (*D_80185034)(); +extern M2C_UNK (*D_8018503C)(); +extern s32 (*D_80185040)(); +extern s32 D_801B93F0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B816C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80185388; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018886C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801853A0; +extern M2C_UNK D_801853A8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801853B0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801853CC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801853D8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801853EC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018543C[]; +extern s16 D_8018546C[]; +extern s16 D_801854CC[]; +extern s16 D_801854D4[]; +extern s16 D_801854F4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018552C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80185584[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801855CC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801855D4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801855DC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801855E4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018558C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801855AC; +extern void func_801321B0(int param_1); +extern int D_801855BC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B9460; +extern s32 D_801B9464[]; +extern int D_801B9468; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801855F0; +extern u8 D_801855EC; +extern s16 *D_801855F4; +extern u8 D_801855F8; +extern int D_801B9460; +extern u16 D_801B9470; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801855F4; /* holds a pointer value (*(u16**)&D_801855F4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80185608[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018565C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185660[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801856A4; +extern u8 D_801856E8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018572C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801857A4, D_801857A6, D_801857A8, D_801857AA, D_801857AC, D_801857AE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B94D8; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B94DC; +extern s8 D_801B94DD; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B94FC; +extern s32 D_801B94F0; +extern s32 D_801B94F4; +extern s32 D_801B9500; +extern void func_8013CABC(void); +extern s32 D_801B94F8; +extern void func_8013CAE8(void); +extern s32 D_801B9528; +extern s32 D_801B952C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B9508; +extern s32 D_801B950C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801BA97A; +extern u8 D_801BA9EE; +extern u8 D_801BA8A2; +extern u8 D_801BA95C; +extern u8 D_801BA880; +extern u8 D_801BA8A1; +extern s32 D_801BA960; +extern void func_8013D330(void); +extern void *D_801B94E0; +extern void *D_801B94E4; +extern void *D_801B94E8; +extern s32 D_801B9510; +extern s32 D_801B9514; +extern s32 D_801B9518; +extern s32 D_801BA8D4[]; +extern u8 D_8018589C[]; +extern u8 D_80185944[]; +extern u8 D_801857F4[]; +extern u8 D_801858F0[]; +extern u8 D_80185970[]; +extern u8 D_80185848[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B94EC; +extern s32 D_801B951C; +extern s32 D_801B9520; +extern s32 D_801B9524; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B9504; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801863FC; +extern s32 D_80115188; +extern s16 D_801863D4; +extern s16 D_801863D6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801863D8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801860B4; +extern u8 *D_801860B8; +extern u8 *D_801860BC; +extern u8 *D_801860C0; +extern u8 *D_801860C4; +extern u16 *D_801860C8[]; +extern u16 *D_801860D0[]; +extern u16 *D_801860F0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801860B4; + iVar2 = func_80028D58(); + puVar3 = D_801860C8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801860B8; + iVar2 = func_80028DE0(); + puVar3 = D_801860C8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801860BC + 0x18) = *D_801860D0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801860C0 + 0x18) = *D_801860D0[iVar2]; + + puVar1 = D_801860C4; + iVar2 = func_80028D9C(); + puVar3 = D_801860F0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185FF0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185FF0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80186000; +extern char *D_80186020; +extern char *D_80186024; +extern char *D_80186028; +extern char *D_8018602C; +extern char *D_80186030; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80186000); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80186020; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186024; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186028; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018602C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80186030; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80185EBA; +extern unsigned short D_80185EBE; +extern unsigned short D_80185EC2; +extern unsigned short D_80185EC6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80185EBA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185EBE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185EC2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185EC6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186450[])(void); + +void func_80141788(void) +{ + D_80186450[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018645C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018645C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801863D4; +extern s16 D_801863D6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80186074; + extern u8 D_8018608C; + extern u8 D_80186100; + extern u8 D_80186108; + extern void *D_801B9538; + extern void *D_801B953C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B9538 = &D_80186074; + D_801B953C = &D_80186100; + } else { + D_801B9538 = &D_8018608C; + D_801B953C = &D_80186108; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801863D4 = 0xE; + D_801863D6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801863D8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801863D8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801863D8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801863B0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801863B0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80186480[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80186480[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80186490[])(void); + +void func_801425CC(void *a0) { + D_80186490[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80186474; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80186474); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801864A4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801864A4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801864C0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801864C0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186690[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186690[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186748[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186748[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B8AF8; +extern u8 D_801B9540; +extern u8 D_801B9541; +extern u8 D_801B9542; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B8AF8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B9540 = mul * (local.b[0] >> 4); + D_801B9541 = mul * (local.b[1] >> 4); + D_801B9542 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80186498; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80186498); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801864B4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801864B4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80186680[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80186680[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801866A0[]; +extern unsigned char D_80186700[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801866A0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80186700); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B8AF4; +extern u8 D_801B9540; +extern u8 D_801B9544; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B8AF4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B9540); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B9540, 0x10); + memcpy(&D_801B9544, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80186858[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80186858[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80186980[])(void); + +void func_80143B30(void *a0) { + D_80186980[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018698C[])(void); + +void func_80143C38(void *a0) { + D_8018698C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80186994[])(void); + +void func_80143C98(void *a0) { + D_80186994[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80143D28); + + +extern void (*D_801869DC[])(void); + +void func_80143E68(void *a0) { + D_801869DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801869F0[])(void); + +void func_80144054(void *a0) { + D_801869F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801869F8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801869F8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186974; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80186974, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80186988; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80186988 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80186988 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018699C; +extern u8 D_801869A8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018699C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801869A8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80186974; +extern u8 D_801869E4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80186974, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801869E4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186A00[])(void); + +void func_801449C8(void *a0) { + D_80186A00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186A08[])(void); + +void func_80144A2C(void *a0) { + D_80186A08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c b/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c index 322b6300a..c8441abfd 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018E370; -extern u8 *D_8018E374; -extern u8 *D_8018E378; -extern u8 *D_8018E37C; -extern u8 *D_8018E380; -extern u16 *D_8018E384[]; -extern u16 *D_8018E38C[]; -extern u16 *D_8018E3AC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018E370; - iVar2 = func_80028D58(); - puVar3 = D_8018E384[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018E374; - iVar2 = func_80028DE0(); - puVar3 = D_8018E384[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018E378 + 0x18) = *D_8018E38C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018E37C + 0x18) = *D_8018E38C[iVar2]; - - puVar1 = D_8018E380; - iVar2 = func_80028D9C(); - puVar3 = D_8018E3AC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018E2AC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018E2AC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018E2BC; -extern char *D_8018E2DC; -extern char *D_8018E2E0; -extern char *D_8018E2E4; -extern char *D_8018E2E8; -extern char *D_8018E2EC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018E2BC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018E2DC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E2E0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E2E4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E2E8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018E2EC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018E176; -extern unsigned short D_8018E17A; -extern unsigned short D_8018E17E; -extern unsigned short D_8018E182; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018E176; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E17A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E17E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018E182; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018E70C[])(void); - -void func_80141788(void) -{ - D_8018E70C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018E718[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018E718[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018E690; -extern s16 D_8018E692; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018E330; - extern u8 D_8018E348; - extern u8 D_8018E3BC; - extern u8 D_8018E3C4; - extern void *D_801E0DA0; - extern void *D_801E0DA4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801E0DA0 = &D_8018E330; - D_801E0DA4 = &D_8018E3BC; - } else { - D_801E0DA0 = &D_8018E348; - D_801E0DA4 = &D_8018E3C4; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018E690 = 0xE; - D_8018E692 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018E694: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018E694; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018E694); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018E66C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018E66C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018E73C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018E73C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018E74C[])(void); - -void func_801425CC(void *a0) { - D_8018E74C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018E730; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018E730); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E760[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E760[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E77C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E77C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E94C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E94C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018EA04[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018EA04[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801E0308; -extern u8 D_801E0DA8; -extern u8 D_801E0DA9; -extern u8 D_801E0DAA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801E0308; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801E0DA8 = mul * (local.b[0] >> 4); - D_801E0DA9 = mul * (local.b[1] >> 4); - D_801E0DAA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018E754; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E754); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E770[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E770); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018E93C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018E93C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018E95C[]; -extern unsigned char D_8018E9BC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E95C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018E9BC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801E0304; -extern u8 D_801E0DA8; -extern u8 D_801E0DAC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801E0304, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801E0DA8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801E0DA8, 0x10); - memcpy(&D_801E0DAC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018EB14[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018EB14[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018EC3C[])(void); - -void func_80143B30(void *a0) { - D_8018EC3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018EC48[])(void); - -void func_80143C38(void *a0) { - D_8018EC48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018EC50[])(void); - -void func_80143C98(void *a0) { - D_8018EC50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018EC98[])(void); - -void func_80143E68(void *a0) { - D_8018EC98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018ECAC[])(void); - -void func_80144054(void *a0) { - D_8018ECAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018ECB4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018ECB4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018EC30; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018EC30, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018EC44; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EC44 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EC44 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018EC58; -extern u8 D_8018EC64; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EC58); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EC64); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018EC30; -extern u8 D_8018ECA0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018EC30, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018ECA0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018ECBC[])(void); - -void func_801449C8(void *a0) { - D_8018ECBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018ECC4[])(void); - -void func_80144A2C(void *a0) { - D_8018ECC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80140608.c b/src/ov_SC06_022/ov_SC06_022_jr_80140608.c new file mode 100644 index 000000000..e69dbc9cb --- /dev/null +++ b/src/ov_SC06_022/ov_SC06_022_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801DF978; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018D5B0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801E0C5C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E2200; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801DF978; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018D2EC)(); +extern s16 (*D_8018D2F0)(); +extern M2C_UNK (*D_8018D2F8)(); +extern s32 (*D_8018D2FC)(); +extern s32 D_801E0C58; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801DF97C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018D644; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80190B28; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018D65C; +extern M2C_UNK D_8018D664; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018D66C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018D688[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018D694[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018D6A8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018D6F8[]; +extern s16 D_8018D728[]; +extern s16 D_8018D788[]; +extern s16 D_8018D790[]; +extern s16 D_8018D7B0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018D7E8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018D840[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018D888[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018D890[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018D898[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018D8A0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018D848; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018D868; +extern void func_801321B0(int param_1); +extern int D_8018D878; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801E0CC8; +extern s32 D_801E0CCC[]; +extern int D_801E0CD0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018D8AC; +extern u8 D_8018D8A8; +extern s16 *D_8018D8B0; +extern u8 D_8018D8B4; +extern int D_801E0CC8; +extern u16 D_801E0CD8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018D8B0; /* holds a pointer value (*(u16**)&D_8018D8B0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018D8C4[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018D918; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018D91C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018D960; +extern u8 D_8018D9A4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018D9E8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018DA60, D_8018DA62, D_8018DA64, D_8018DA66, D_8018DA68, D_8018DA6A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801E0D40; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801E0D44; +extern s8 D_801E0D45; +extern void func_8013C9C4(void * arg0); +extern s32 D_801E0D64; +extern s32 D_801E0D58; +extern s32 D_801E0D5C; +extern s32 D_801E0D68; +extern void func_8013CABC(void); +extern s32 D_801E0D60; +extern void func_8013CAE8(void); +extern s32 D_801E0D90; +extern s32 D_801E0D94; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801E0D70; +extern s32 D_801E0D74; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E21FA; +extern u8 D_801E226E; +extern u8 D_801E2122; +extern u8 D_801E21DC; +extern u8 D_801E2100; +extern u8 D_801E2121; +extern s32 D_801E21E0; +extern void func_8013D330(void); +extern void *D_801E0D48; +extern void *D_801E0D4C; +extern void *D_801E0D50; +extern s32 D_801E0D78; +extern s32 D_801E0D7C; +extern s32 D_801E0D80; +extern s32 D_801E2154[]; +extern u8 D_8018DB58[]; +extern u8 D_8018DC00[]; +extern u8 D_8018DAB0[]; +extern u8 D_8018DBAC[]; +extern u8 D_8018DC2C[]; +extern u8 D_8018DB04[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801E0D54; +extern s32 D_801E0D84; +extern s32 D_801E0D88; +extern s32 D_801E0D8C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801E0D6C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018E6B8; +extern s32 D_80115188; +extern s16 D_8018E690; +extern s16 D_8018E692; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018E694; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018E370; +extern u8 *D_8018E374; +extern u8 *D_8018E378; +extern u8 *D_8018E37C; +extern u8 *D_8018E380; +extern u16 *D_8018E384[]; +extern u16 *D_8018E38C[]; +extern u16 *D_8018E3AC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018E370; + iVar2 = func_80028D58(); + puVar3 = D_8018E384[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018E374; + iVar2 = func_80028DE0(); + puVar3 = D_8018E384[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018E378 + 0x18) = *D_8018E38C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018E37C + 0x18) = *D_8018E38C[iVar2]; + + puVar1 = D_8018E380; + iVar2 = func_80028D9C(); + puVar3 = D_8018E3AC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018E2AC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018E2AC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018E2BC; +extern char *D_8018E2DC; +extern char *D_8018E2E0; +extern char *D_8018E2E4; +extern char *D_8018E2E8; +extern char *D_8018E2EC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018E2BC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018E2DC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E2E0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E2E4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E2E8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018E2EC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018E176; +extern unsigned short D_8018E17A; +extern unsigned short D_8018E17E; +extern unsigned short D_8018E182; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018E176; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E17A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E17E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018E182; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018E70C[])(void); + +void func_80141788(void) +{ + D_8018E70C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018E718[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018E718[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018E690; +extern s16 D_8018E692; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018E330; + extern u8 D_8018E348; + extern u8 D_8018E3BC; + extern u8 D_8018E3C4; + extern void *D_801E0DA0; + extern void *D_801E0DA4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801E0DA0 = &D_8018E330; + D_801E0DA4 = &D_8018E3BC; + } else { + D_801E0DA0 = &D_8018E348; + D_801E0DA4 = &D_8018E3C4; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018E690 = 0xE; + D_8018E692 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018E694: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018E694; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018E694); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018E66C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018E66C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018E73C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018E73C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018E74C[])(void); + +void func_801425CC(void *a0) { + D_8018E74C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018E730; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018E730); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E760[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E760[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E77C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E77C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E94C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E94C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018EA04[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018EA04[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801E0308; +extern u8 D_801E0DA8; +extern u8 D_801E0DA9; +extern u8 D_801E0DAA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801E0308; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801E0DA8 = mul * (local.b[0] >> 4); + D_801E0DA9 = mul * (local.b[1] >> 4); + D_801E0DAA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018E754; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018E754); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E770[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018E770); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018E93C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018E93C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018E95C[]; +extern unsigned char D_8018E9BC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018E95C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018E9BC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801E0304; +extern u8 D_801E0DA8; +extern u8 D_801E0DAC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801E0304, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801E0DA8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801E0DA8, 0x10); + memcpy(&D_801E0DAC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018EB14[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018EB14[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018EC3C[])(void); + +void func_80143B30(void *a0) { + D_8018EC3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018EC48[])(void); + +void func_80143C38(void *a0) { + D_8018EC48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018EC50[])(void); + +void func_80143C98(void *a0) { + D_8018EC50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80143D28); + + +extern void (*D_8018EC98[])(void); + +void func_80143E68(void *a0) { + D_8018EC98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018ECAC[])(void); + +void func_80144054(void *a0) { + D_8018ECAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018ECB4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018ECB4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EC30; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018EC30, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018EC44; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018EC44 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018EC44 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018EC58; +extern u8 D_8018EC64; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018EC58); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018EC64); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018EC30; +extern u8 D_8018ECA0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018EC30, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018ECA0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018ECBC[])(void); + +void func_801449C8(void *a0) { + D_8018ECBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018ECC4[])(void); + +void func_80144A2C(void *a0) { + D_8018ECC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c b/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c index 0ec25d53a..b551d8e22 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80190848; -extern u8 *D_8019084C; -extern u8 *D_80190850; -extern u8 *D_80190854; -extern u8 *D_80190858; -extern u16 *D_8019085C[]; -extern u16 *D_80190864[]; -extern u16 *D_80190884[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80190848; - iVar2 = func_80028D58(); - puVar3 = D_8019085C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8019084C; - iVar2 = func_80028DE0(); - puVar3 = D_8019085C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80190850 + 0x18) = *D_80190864[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80190854 + 0x18) = *D_80190864[iVar2]; - - puVar1 = D_80190858; - iVar2 = func_80028D9C(); - puVar3 = D_80190884[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80190784; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80190784); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80190794; -extern char *D_801907B4; -extern char *D_801907B8; -extern char *D_801907BC; -extern char *D_801907C0; -extern char *D_801907C4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80190794); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801907B4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801907B8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801907BC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801907C0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801907C4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8019064E; -extern unsigned short D_80190652; -extern unsigned short D_80190656; -extern unsigned short D_8019065A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8019064E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80190652; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80190656; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019065A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80190BE4[])(void); - -void func_80141788(void) -{ - D_80190BE4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80190BF0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80190BF0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80190B68; -extern s16 D_80190B6A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80190808; - extern u8 D_80190820; - extern u8 D_80190894; - extern u8 D_8019089C; - extern void *D_801DFF20; - extern void *D_801DFF24; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801DFF20 = &D_80190808; - D_801DFF24 = &D_80190894; - } else { - D_801DFF20 = &D_80190820; - D_801DFF24 = &D_8019089C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80190B68 = 0xE; - D_80190B6A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80190B6C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80190B6C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80190B6C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80190B44; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80190B44 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80190C14[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80190C14[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80190C24[])(void); - -void func_801425CC(void *a0) { - D_80190C24[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80190C08; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80190C08); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80190C38[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80190C38[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80190C54[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80190C54[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80190E24[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80190E24[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80190EDC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80190EDC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801DF44C; -extern u8 D_801DFF28; -extern u8 D_801DFF29; -extern u8 D_801DFF2A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801DF44C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801DFF28 = mul * (local.b[0] >> 4); - D_801DFF29 = mul * (local.b[1] >> 4); - D_801DFF2A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80190C2C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80190C2C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80190C48[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80190C48); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80190E14[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80190E14[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80190E34[]; -extern unsigned char D_80190E94[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80190E34); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80190E94); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801DF448; -extern u8 D_801DFF28; -extern u8 D_801DFF2C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801DF448, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801DFF28); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801DFF28, 0x10); - memcpy(&D_801DFF2C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80190FEC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80190FEC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80191114[])(void); - -void func_80143B30(void *a0) { - D_80191114[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80191120[])(void); - -void func_80143C38(void *a0) { - D_80191120[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80191128[])(void); - -void func_80143C98(void *a0) { - D_80191128[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80143D28); - - -extern void (*D_80191170[])(void); - -void func_80143E68(void *a0) { - D_80191170[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80191184[])(void); - -void func_80144054(void *a0) { - D_80191184[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8019118C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8019118C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80191108; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80191108, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8019111C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8019111C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8019111C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80191130; -extern u8 D_8019113C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80191130); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8019113C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80191108; -extern u8 D_80191178; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80191108, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80191178, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80191194[])(void); - -void func_801449C8(void *a0) { - D_80191194[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8019119C[])(void); - -void func_80144A2C(void *a0) { - D_8019119C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_024/ov_SC06_024_jr_80140608.c b/src/ov_SC06_024/ov_SC06_024_jr_80140608.c new file mode 100644 index 000000000..241437583 --- /dev/null +++ b/src/ov_SC06_024/ov_SC06_024_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801DEABC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018FA88[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801DFDDC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E18F8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801DEABC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018F7C4)(); +extern s16 (*D_8018F7C8)(); +extern M2C_UNK (*D_8018F7D0)(); +extern s32 (*D_8018F7D4)(); +extern s32 D_801DFDD8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801DEAC0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018FB1C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80193000; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018FB34; +extern M2C_UNK D_8018FB3C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018FB44; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018FB60[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018FB6C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018FB80[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018FBD0[]; +extern s16 D_8018FC00[]; +extern s16 D_8018FC60[]; +extern s16 D_8018FC68[]; +extern s16 D_8018FC88[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018FCC0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018FD18[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018FD60[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018FD68[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018FD70[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018FD78[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018FD20; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018FD40; +extern void func_801321B0(int param_1); +extern int D_8018FD50; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801DFE48; +extern s32 D_801DFE4C[]; +extern int D_801DFE50; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018FD84; +extern u8 D_8018FD80; +extern s16 *D_8018FD88; +extern u8 D_8018FD8C; +extern int D_801DFE48; +extern u16 D_801DFE58; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018FD88; /* holds a pointer value (*(u16**)&D_8018FD88) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018FD9C[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018FDF0; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018FDF4[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018FE38; +extern u8 D_8018FE7C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018FEC0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018FF38, D_8018FF3A, D_8018FF3C, D_8018FF3E, D_8018FF40, D_8018FF42; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801DFEC0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801DFEC4; +extern s8 D_801DFEC5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801DFEE4; +extern s32 D_801DFED8; +extern s32 D_801DFEDC; +extern s32 D_801DFEE8; +extern void func_8013CABC(void); +extern s32 D_801DFEE0; +extern void func_8013CAE8(void); +extern s32 D_801DFF10; +extern s32 D_801DFF14; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801DFEF0; +extern s32 D_801DFEF4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E18F2; +extern u8 D_801E1966; +extern u8 D_801E181A; +extern u8 D_801E18D4; +extern u8 D_801E17F8; +extern u8 D_801E1819; +extern s32 D_801E18D8; +extern void func_8013D330(void); +extern void *D_801DFEC8; +extern void *D_801DFECC; +extern void *D_801DFED0; +extern s32 D_801DFEF8; +extern s32 D_801DFEFC; +extern s32 D_801DFF00; +extern s32 D_801E184C[]; +extern u8 D_80190030[]; +extern u8 D_801900D8[]; +extern u8 D_8018FF88[]; +extern u8 D_80190084[]; +extern u8 D_80190104[]; +extern u8 D_8018FFDC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801DFED4; +extern s32 D_801DFF04; +extern s32 D_801DFF08; +extern s32 D_801DFF0C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801DFEEC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80190B90; +extern s32 D_80115188; +extern s16 D_80190B68; +extern s16 D_80190B6A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80190B6C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80190848; +extern u8 *D_8019084C; +extern u8 *D_80190850; +extern u8 *D_80190854; +extern u8 *D_80190858; +extern u16 *D_8019085C[]; +extern u16 *D_80190864[]; +extern u16 *D_80190884[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80190848; + iVar2 = func_80028D58(); + puVar3 = D_8019085C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8019084C; + iVar2 = func_80028DE0(); + puVar3 = D_8019085C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80190850 + 0x18) = *D_80190864[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80190854 + 0x18) = *D_80190864[iVar2]; + + puVar1 = D_80190858; + iVar2 = func_80028D9C(); + puVar3 = D_80190884[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80190784; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80190784); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80190794; +extern char *D_801907B4; +extern char *D_801907B8; +extern char *D_801907BC; +extern char *D_801907C0; +extern char *D_801907C4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80190794); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801907B4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801907B8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801907BC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801907C0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801907C4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8019064E; +extern unsigned short D_80190652; +extern unsigned short D_80190656; +extern unsigned short D_8019065A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8019064E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80190652; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80190656; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019065A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80190BE4[])(void); + +void func_80141788(void) +{ + D_80190BE4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80190BF0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80190BF0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80190B68; +extern s16 D_80190B6A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80190808; + extern u8 D_80190820; + extern u8 D_80190894; + extern u8 D_8019089C; + extern void *D_801DFF20; + extern void *D_801DFF24; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801DFF20 = &D_80190808; + D_801DFF24 = &D_80190894; + } else { + D_801DFF20 = &D_80190820; + D_801DFF24 = &D_8019089C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80190B68 = 0xE; + D_80190B6A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80190B6C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80190B6C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80190B6C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80190B44; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80190B44 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80190C14[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80190C14[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80190C24[])(void); + +void func_801425CC(void *a0) { + D_80190C24[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80190C08; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80190C08); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80190C38[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80190C38[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80190C54[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80190C54[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80190E24[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80190E24[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80190EDC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80190EDC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801DF44C; +extern u8 D_801DFF28; +extern u8 D_801DFF29; +extern u8 D_801DFF2A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801DF44C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801DFF28 = mul * (local.b[0] >> 4); + D_801DFF29 = mul * (local.b[1] >> 4); + D_801DFF2A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80190C2C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80190C2C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80190C48[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80190C48); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80190E14[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80190E14[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80190E34[]; +extern unsigned char D_80190E94[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80190E34); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80190E94); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801DF448; +extern u8 D_801DFF28; +extern u8 D_801DFF2C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801DF448, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801DFF28); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801DFF28, 0x10); + memcpy(&D_801DFF2C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80190FEC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80190FEC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80191114[])(void); + +void func_80143B30(void *a0) { + D_80191114[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80191120[])(void); + +void func_80143C38(void *a0) { + D_80191120[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80191128[])(void); + +void func_80143C98(void *a0) { + D_80191128[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80143D28); + + +extern void (*D_80191170[])(void); + +void func_80143E68(void *a0) { + D_80191170[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80191184[])(void); + +void func_80144054(void *a0) { + D_80191184[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8019118C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8019118C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80191108; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80191108, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8019111C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8019111C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8019111C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80191130; +extern u8 D_8019113C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80191130); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8019113C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80191108; +extern u8 D_80191178; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80191108, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80191178, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80191194[])(void); + +void func_801449C8(void *a0) { + D_80191194[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8019119C[])(void); + +void func_80144A2C(void *a0) { + D_8019119C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c b/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c index c8b77f09b..cb77b8e30 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80185CEC; -extern u8 *D_80185CF0; -extern u8 *D_80185CF4; -extern u8 *D_80185CF8; -extern u8 *D_80185CFC; -extern u16 *D_80185D00[]; -extern u16 *D_80185D08[]; -extern u16 *D_80185D28[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80185CEC; - iVar2 = func_80028D58(); - puVar3 = D_80185D00[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80185CF0; - iVar2 = func_80028DE0(); - puVar3 = D_80185D00[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80185CF4 + 0x18) = *D_80185D08[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80185CF8 + 0x18) = *D_80185D08[iVar2]; - - puVar1 = D_80185CFC; - iVar2 = func_80028D9C(); - puVar3 = D_80185D28[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80185C28; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80185C28); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80185C38; -extern char *D_80185C58; -extern char *D_80185C5C; -extern char *D_80185C60; -extern char *D_80185C64; -extern char *D_80185C68; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80185C38); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80185C58; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C5C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C60; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C64; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80185C68; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80185AF2; -extern unsigned short D_80185AF6; -extern unsigned short D_80185AFA; -extern unsigned short D_80185AFE; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80185AF2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80185AF6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185AFA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80185AFE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80186088[])(void); - -void func_80141788(void) -{ - D_80186088[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80186094[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80186094[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018600C; -extern s16 D_8018600E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80185CAC; - extern u8 D_80185CC4; - extern u8 D_80185D38; - extern u8 D_80185D40; - extern void *D_801B00E8; - extern void *D_801B00EC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B00E8 = &D_80185CAC; - D_801B00EC = &D_80185D38; - } else { - D_801B00E8 = &D_80185CC4; - D_801B00EC = &D_80185D40; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018600C = 0xE; - D_8018600E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80186010: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80186010; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80186010); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80185FE8; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80185FE8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801860B8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801860B8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_801860C8[])(void); - -void func_801425CC(void *a0) { - D_801860C8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_801860AC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801860AC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801860DC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801860DC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801860F8[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801860F8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801862C8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801862C8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80186380[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80186380[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801AF76C; -extern u8 D_801B00F0; -extern u8 D_801B00F1; -extern u8 D_801B00F2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801AF76C; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B00F0 = mul * (local.b[0] >> 4); - D_801B00F1 = mul * (local.b[1] >> 4); - D_801B00F2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_801860D0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801860D0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801860EC[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801860EC); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801862B8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801862B8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801862D8[]; -extern unsigned char D_80186338[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801862D8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80186338); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801AF768; -extern u8 D_801B00F0; -extern u8 D_801B00F4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801AF768, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B00F0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B00F0, 0x10); - memcpy(&D_801B00F4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80186490[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80186490[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_801865B8[])(void); - -void func_80143B30(void *a0) { - D_801865B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_801865C4[])(void); - -void func_80143C38(void *a0) { - D_801865C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_801865CC[])(void); - -void func_80143C98(void *a0) { - D_801865CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80143D28); - - -extern void (*D_80186614[])(void); - -void func_80143E68(void *a0) { - D_80186614[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80186628[])(void); - -void func_80144054(void *a0) { - D_80186628[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80186630[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80186630[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801865AC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801865AC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_801865C0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801865C0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801865C0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801865D4; -extern u8 D_801865E0; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801865D4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801865E0); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_801865AC; -extern u8 D_8018661C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801865AC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018661C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80186638[])(void); - -void func_801449C8(void *a0) { - D_80186638[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80186640[])(void); - -void func_80144A2C(void *a0) { - D_80186640[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_025/ov_SC06_025_jr_80140608.c b/src/ov_SC06_025/ov_SC06_025_jr_80140608.c new file mode 100644 index 000000000..2cd68095d --- /dev/null +++ b/src/ov_SC06_025/ov_SC06_025_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801AEDDC; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80184F2C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801AFFA4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801B2218; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801AEDDC; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80184C68)(); +extern s16 (*D_80184C6C)(); +extern M2C_UNK (*D_80184C74)(); +extern s32 (*D_80184C78)(); +extern s32 D_801AFFA0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801AEDE0; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80184FC0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801884A4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80184FD8; +extern M2C_UNK D_80184FE0; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80184FE8; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80185004[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80185010[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80185024[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80185074[]; +extern s16 D_801850A4[]; +extern s16 D_80185104[]; +extern s16 D_8018510C[]; +extern s16 D_8018512C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80185164[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_801851BC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80185204[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018520C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80185214[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018521C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_801851C4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801851E4; +extern void func_801321B0(int param_1); +extern int D_801851F4; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B0010; +extern s32 D_801B0014[]; +extern int D_801B0018; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80185228; +extern u8 D_80185224; +extern s16 *D_8018522C; +extern u8 D_80185230; +extern int D_801B0010; +extern u16 D_801B0020; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018522C; /* holds a pointer value (*(u16**)&D_8018522C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80185240[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80185294; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80185298[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801852DC; +extern u8 D_80185320; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80185364[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801853DC, D_801853DE, D_801853E0, D_801853E2, D_801853E4, D_801853E6; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B0088; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B008C; +extern s8 D_801B008D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B00AC; +extern s32 D_801B00A0; +extern s32 D_801B00A4; +extern s32 D_801B00B0; +extern void func_8013CABC(void); +extern s32 D_801B00A8; +extern void func_8013CAE8(void); +extern s32 D_801B00D8; +extern s32 D_801B00DC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B00B8; +extern s32 D_801B00BC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801B2212; +extern u8 D_801B2286; +extern u8 D_801B213A; +extern u8 D_801B21F4; +extern u8 D_801B2118; +extern u8 D_801B2139; +extern s32 D_801B21F8; +extern void func_8013D330(void); +extern void *D_801B0090; +extern void *D_801B0094; +extern void *D_801B0098; +extern s32 D_801B00C0; +extern s32 D_801B00C4; +extern s32 D_801B00C8; +extern s32 D_801B216C[]; +extern u8 D_801854D4[]; +extern u8 D_8018557C[]; +extern u8 D_8018542C[]; +extern u8 D_80185528[]; +extern u8 D_801855A8[]; +extern u8 D_80185480[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B009C; +extern s32 D_801B00CC; +extern s32 D_801B00D0; +extern s32 D_801B00D4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B00B4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80186034; +extern s32 D_80115188; +extern s16 D_8018600C; +extern s16 D_8018600E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80186010; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80185CEC; +extern u8 *D_80185CF0; +extern u8 *D_80185CF4; +extern u8 *D_80185CF8; +extern u8 *D_80185CFC; +extern u16 *D_80185D00[]; +extern u16 *D_80185D08[]; +extern u16 *D_80185D28[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80185CEC; + iVar2 = func_80028D58(); + puVar3 = D_80185D00[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80185CF0; + iVar2 = func_80028DE0(); + puVar3 = D_80185D00[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80185CF4 + 0x18) = *D_80185D08[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80185CF8 + 0x18) = *D_80185D08[iVar2]; + + puVar1 = D_80185CFC; + iVar2 = func_80028D9C(); + puVar3 = D_80185D28[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80185C28; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80185C28); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80185C38; +extern char *D_80185C58; +extern char *D_80185C5C; +extern char *D_80185C60; +extern char *D_80185C64; +extern char *D_80185C68; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80185C38); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80185C58; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C5C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C60; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C64; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80185C68; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80185AF2; +extern unsigned short D_80185AF6; +extern unsigned short D_80185AFA; +extern unsigned short D_80185AFE; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80185AF2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80185AF6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185AFA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80185AFE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80186088[])(void); + +void func_80141788(void) +{ + D_80186088[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80186094[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80186094[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018600C; +extern s16 D_8018600E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80185CAC; + extern u8 D_80185CC4; + extern u8 D_80185D38; + extern u8 D_80185D40; + extern void *D_801B00E8; + extern void *D_801B00EC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B00E8 = &D_80185CAC; + D_801B00EC = &D_80185D38; + } else { + D_801B00E8 = &D_80185CC4; + D_801B00EC = &D_80185D40; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018600C = 0xE; + D_8018600E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80186010: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80186010; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80186010); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80185FE8; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80185FE8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801860B8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801860B8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_801860C8[])(void); + +void func_801425CC(void *a0) { + D_801860C8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_801860AC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801860AC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801860DC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801860DC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801860F8[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801860F8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801862C8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801862C8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80186380[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80186380[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801AF76C; +extern u8 D_801B00F0; +extern u8 D_801B00F1; +extern u8 D_801B00F2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801AF76C; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B00F0 = mul * (local.b[0] >> 4); + D_801B00F1 = mul * (local.b[1] >> 4); + D_801B00F2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_801860D0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801860D0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801860EC[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801860EC); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801862B8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801862B8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801862D8[]; +extern unsigned char D_80186338[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_801862D8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80186338); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801AF768; +extern u8 D_801B00F0; +extern u8 D_801B00F4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801AF768, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B00F0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B00F0, 0x10); + memcpy(&D_801B00F4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80186490[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80186490[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_801865B8[])(void); + +void func_80143B30(void *a0) { + D_801865B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_801865C4[])(void); + +void func_80143C38(void *a0) { + D_801865C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_801865CC[])(void); + +void func_80143C98(void *a0) { + D_801865CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80143D28); + + +extern void (*D_80186614[])(void); + +void func_80143E68(void *a0) { + D_80186614[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80186628[])(void); + +void func_80144054(void *a0) { + D_80186628[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80186630[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80186630[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801865AC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801865AC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_801865C0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_801865C0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_801865C0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801865D4; +extern u8 D_801865E0; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_801865D4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801865E0); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_801865AC; +extern u8 D_8018661C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801865AC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018661C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80186638[])(void); + +void func_801449C8(void *a0) { + D_80186638[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80186640[])(void); + +void func_80144A2C(void *a0) { + D_80186640[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c b/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c index ed9d6dd0f..e099b4b34 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017F02C; -extern u8 *D_8017F030; -extern u8 *D_8017F034; -extern u8 *D_8017F038; -extern u8 *D_8017F03C; -extern u16 *D_8017F040[]; -extern u16 *D_8017F048[]; -extern u16 *D_8017F068[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F02C; - iVar2 = func_80028D58(); - puVar3 = D_8017F040[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F030; - iVar2 = func_80028DE0(); - puVar3 = D_8017F040[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F034 + 0x18) = *D_8017F048[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F038 + 0x18) = *D_8017F048[iVar2]; - - puVar1 = D_8017F03C; - iVar2 = func_80028D9C(); - puVar3 = D_8017F068[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017EF68; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017EF68); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017EF78; -extern char *D_8017EF98; -extern char *D_8017EF9C; -extern char *D_8017EFA0; -extern char *D_8017EFA4; -extern char *D_8017EFA8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017EF78); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017EF98; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017EF9C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017EFA0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017EFA4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017EFA8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017EE32; -extern unsigned short D_8017EE36; -extern unsigned short D_8017EE3A; -extern unsigned short D_8017EE3E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017EE32; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EE36; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EE3A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EE3E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F3C8[])(void); - -void func_80141788(void) -{ - D_8017F3C8[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F3D4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F3D4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F34C; -extern s16 D_8017F34E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017EFEC; - extern u8 D_8017F004; - extern u8 D_8017F078; - extern u8 D_8017F080; - extern void *D_8019C0C0; - extern void *D_8019C0C4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019C0C0 = &D_8017EFEC; - D_8019C0C4 = &D_8017F078; - } else { - D_8019C0C0 = &D_8017F004; - D_8019C0C4 = &D_8017F080; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F34C = 0xE; - D_8017F34E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F350: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F350; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F350); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F328; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F328 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F3F8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F3F8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F408[])(void); - -void func_801425CC(void *a0) { - D_8017F408[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F3EC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F3EC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F41C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F41C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F438[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F438[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F608[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F608[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F6C0[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F6C0[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_8019B7A8; -extern u8 D_8019C0C8; -extern u8 D_8019C0C9; -extern u8 D_8019C0CA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8019B7A8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019C0C8 = mul * (local.b[0] >> 4); - D_8019C0C9 = mul * (local.b[1] >> 4); - D_8019C0CA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F410; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F410); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F42C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F42C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F5F8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F5F8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F618[]; -extern unsigned char D_8017F678[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F618); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F678); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_8019B7A4; -extern u8 D_8019C0C8; -extern u8 D_8019C0CC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8019B7A4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019C0C8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019C0C8, 0x10); - memcpy(&D_8019C0CC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017F7D0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017F7D0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017F8F8[])(void); - -void func_80143B30(void *a0) { - D_8017F8F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017F904[])(void); - -void func_80143C38(void *a0) { - D_8017F904[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017F90C[])(void); - -void func_80143C98(void *a0) { - D_8017F90C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017F954[])(void); - -void func_80143E68(void *a0) { - D_8017F954[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017F968[])(void); - -void func_80144054(void *a0) { - D_8017F968[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017F970[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017F970[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017F8EC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017F8EC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017F900; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F900 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F900 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017F914; -extern u8 D_8017F920; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F914); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F920); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017F8EC; -extern u8 D_8017F95C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017F8EC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017F95C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017F978[])(void); - -void func_801449C8(void *a0) { - D_8017F978[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017F980[])(void); - -void func_80144A2C(void *a0) { - D_8017F980[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_027/ov_SC06_027_jr_80140608.c b/src/ov_SC06_027/ov_SC06_027_jr_80140608.c new file mode 100644 index 000000000..de159aa49 --- /dev/null +++ b/src/ov_SC06_027/ov_SC06_027_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_8019AE18; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E26C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019BF7C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_8019D3C0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_8019AE18; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017DFA8)(); +extern s16 (*D_8017DFAC)(); +extern M2C_UNK (*D_8017DFB4)(); +extern s32 (*D_8017DFB8)(); +extern s32 D_8019BF78; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019AE1C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E300; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801817E4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E318; +extern M2C_UNK D_8017E320; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E328; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E344[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E350[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E364[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E3B4[]; +extern s16 D_8017E3E4[]; +extern s16 D_8017E444[]; +extern s16 D_8017E44C[]; +extern s16 D_8017E46C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E4A4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E4FC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E544[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E54C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E554[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E55C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E504; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E524; +extern void func_801321B0(int param_1); +extern int D_8017E534; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019BFE8; +extern s32 D_8019BFEC[]; +extern int D_8019BFF0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E568; +extern u8 D_8017E564; +extern s16 *D_8017E56C; +extern u8 D_8017E570; +extern int D_8019BFE8; +extern u16 D_8019BFF8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E56C; /* holds a pointer value (*(u16**)&D_8017E56C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E580[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E5D4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E5D8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E61C; +extern u8 D_8017E660; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E6A4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E71C, D_8017E71E, D_8017E720, D_8017E722, D_8017E724, D_8017E726; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019C060; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019C064; +extern s8 D_8019C065; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019C084; +extern s32 D_8019C078; +extern s32 D_8019C07C; +extern s32 D_8019C088; +extern void func_8013CABC(void); +extern s32 D_8019C080; +extern void func_8013CAE8(void); +extern s32 D_8019C0B0; +extern s32 D_8019C0B4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019C090; +extern s32 D_8019C094; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_8019D3BA; +extern u8 D_8019D42E; +extern u8 D_8019D2E2; +extern u8 D_8019D39C; +extern u8 D_8019D2C0; +extern u8 D_8019D2E1; +extern s32 D_8019D3A0; +extern void func_8013D330(void); +extern void *D_8019C068; +extern void *D_8019C06C; +extern void *D_8019C070; +extern s32 D_8019C098; +extern s32 D_8019C09C; +extern s32 D_8019C0A0; +extern s32 D_8019D314[]; +extern u8 D_8017E814[]; +extern u8 D_8017E8BC[]; +extern u8 D_8017E76C[]; +extern u8 D_8017E868[]; +extern u8 D_8017E8E8[]; +extern u8 D_8017E7C0[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019C074; +extern s32 D_8019C0A4; +extern s32 D_8019C0A8; +extern s32 D_8019C0AC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019C08C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F374; +extern s32 D_80115188; +extern s16 D_8017F34C; +extern s16 D_8017F34E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F350; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017F02C; +extern u8 *D_8017F030; +extern u8 *D_8017F034; +extern u8 *D_8017F038; +extern u8 *D_8017F03C; +extern u16 *D_8017F040[]; +extern u16 *D_8017F048[]; +extern u16 *D_8017F068[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F02C; + iVar2 = func_80028D58(); + puVar3 = D_8017F040[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F030; + iVar2 = func_80028DE0(); + puVar3 = D_8017F040[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F034 + 0x18) = *D_8017F048[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F038 + 0x18) = *D_8017F048[iVar2]; + + puVar1 = D_8017F03C; + iVar2 = func_80028D9C(); + puVar3 = D_8017F068[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017EF68; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017EF68); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017EF78; +extern char *D_8017EF98; +extern char *D_8017EF9C; +extern char *D_8017EFA0; +extern char *D_8017EFA4; +extern char *D_8017EFA8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017EF78); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017EF98; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017EF9C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017EFA0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017EFA4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017EFA8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017EE32; +extern unsigned short D_8017EE36; +extern unsigned short D_8017EE3A; +extern unsigned short D_8017EE3E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017EE32; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EE36; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EE3A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EE3E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F3C8[])(void); + +void func_80141788(void) +{ + D_8017F3C8[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F3D4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F3D4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F34C; +extern s16 D_8017F34E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017EFEC; + extern u8 D_8017F004; + extern u8 D_8017F078; + extern u8 D_8017F080; + extern void *D_8019C0C0; + extern void *D_8019C0C4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019C0C0 = &D_8017EFEC; + D_8019C0C4 = &D_8017F078; + } else { + D_8019C0C0 = &D_8017F004; + D_8019C0C4 = &D_8017F080; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F34C = 0xE; + D_8017F34E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F350: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F350; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F350); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F328; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F328 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F3F8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F3F8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F408[])(void); + +void func_801425CC(void *a0) { + D_8017F408[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F3EC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F3EC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F41C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F41C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F438[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F438[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F608[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F608[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F6C0[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F6C0[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_8019B7A8; +extern u8 D_8019C0C8; +extern u8 D_8019C0C9; +extern u8 D_8019C0CA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8019B7A8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019C0C8 = mul * (local.b[0] >> 4); + D_8019C0C9 = mul * (local.b[1] >> 4); + D_8019C0CA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F410; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F410); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F42C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F42C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F5F8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F5F8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F618[]; +extern unsigned char D_8017F678[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F618); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F678); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_8019B7A4; +extern u8 D_8019C0C8; +extern u8 D_8019C0CC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8019B7A4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019C0C8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019C0C8, 0x10); + memcpy(&D_8019C0CC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017F7D0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017F7D0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017F8F8[])(void); + +void func_80143B30(void *a0) { + D_8017F8F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017F904[])(void); + +void func_80143C38(void *a0) { + D_8017F904[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017F90C[])(void); + +void func_80143C98(void *a0) { + D_8017F90C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80143D28); + + +extern void (*D_8017F954[])(void); + +void func_80143E68(void *a0) { + D_8017F954[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017F968[])(void); + +void func_80144054(void *a0) { + D_8017F968[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017F970[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017F970[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017F8EC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017F8EC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017F900; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F900 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F900 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017F914; +extern u8 D_8017F920; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F914); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F920); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017F8EC; +extern u8 D_8017F95C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017F8EC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017F95C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017F978[])(void); + +void func_801449C8(void *a0) { + D_8017F978[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017F980[])(void); + +void func_80144A2C(void *a0) { + D_8017F980[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c b/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c index 69fdaa6c5..3db107954 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8018D5C0; -extern u8 *D_8018D5C4; -extern u8 *D_8018D5C8; -extern u8 *D_8018D5CC; -extern u8 *D_8018D5D0; -extern u16 *D_8018D5D4[]; -extern u16 *D_8018D5DC[]; -extern u16 *D_8018D5FC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018D5C0; - iVar2 = func_80028D58(); - puVar3 = D_8018D5D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018D5C4; - iVar2 = func_80028DE0(); - puVar3 = D_8018D5D4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018D5C8 + 0x18) = *D_8018D5DC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018D5CC + 0x18) = *D_8018D5DC[iVar2]; - - puVar1 = D_8018D5D0; - iVar2 = func_80028D9C(); - puVar3 = D_8018D5FC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018D4FC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018D4FC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018D50C; -extern char *D_8018D52C; -extern char *D_8018D530; -extern char *D_8018D534; -extern char *D_8018D538; -extern char *D_8018D53C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018D50C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018D52C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D530; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D534; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D538; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018D53C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018D3C6; -extern unsigned short D_8018D3CA; -extern unsigned short D_8018D3CE; -extern unsigned short D_8018D3D2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018D3C6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D3CA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D3CE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018D3D2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018D95C[])(void); - -void func_80141788(void) -{ - D_8018D95C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018D968[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018D968[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8018D8E0; -extern s16 D_8018D8E2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018D580; - extern u8 D_8018D598; - extern u8 D_8018D60C; - extern u8 D_8018D614; - extern void *D_801DB9E0; - extern void *D_801DB9E4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801DB9E0 = &D_8018D580; - D_801DB9E4 = &D_8018D60C; - } else { - D_801DB9E0 = &D_8018D598; - D_801DB9E4 = &D_8018D614; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018D8E0 = 0xE; - D_8018D8E2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018D8E4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8018D8E4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018D8E4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8018D8BC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8018D8BC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018D98C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018D98C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018D99C[])(void); - -void func_801425CC(void *a0) { - D_8018D99C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8018D980; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018D980); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018D9B0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018D9B0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018D9CC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018D9CC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DB9C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DB9C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018DC54[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018DC54[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801DAE24; -extern u8 D_801DB9E8; -extern u8 D_801DB9E9; -extern u8 D_801DB9EA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801DAE24; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801DB9E8 = mul * (local.b[0] >> 4); - D_801DB9E9 = mul * (local.b[1] >> 4); - D_801DB9EA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8018D9A4; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018D9A4); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018D9C0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018D9C0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018DB8C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018DB8C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018DBAC[]; -extern unsigned char D_8018DC0C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018DBAC); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018DC0C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801DAE20; -extern u8 D_801DB9E8; -extern u8 D_801DB9EC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801DAE20, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801DB9E8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801DB9E8, 0x10); - memcpy(&D_801DB9EC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8018DD64[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018DD64[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018DE8C[])(void); - -void func_80143B30(void *a0) { - D_8018DE8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8018DE98[])(void); - -void func_80143C38(void *a0) { - D_8018DE98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8018DEA0[])(void); - -void func_80143C98(void *a0) { - D_8018DEA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80143D28); - - -extern void (*D_8018DEE8[])(void); - -void func_80143E68(void *a0) { - D_8018DEE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018DEFC[])(void); - -void func_80144054(void *a0) { - D_8018DEFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8018DF04[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8018DF04[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8018DE80; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018DE80, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8018DE94; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018DE94 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018DE94 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8018DEA8; -extern u8 D_8018DEB4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018DEA8); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018DEB4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8018DE80; -extern u8 D_8018DEF0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018DE80, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018DEF0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018DF0C[])(void); - -void func_801449C8(void *a0) { - D_8018DF0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8018DF14[])(void); - -void func_80144A2C(void *a0) { - D_8018DF14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_029/ov_SC06_029_jr_80140608.c b/src/ov_SC06_029/ov_SC06_029_jr_80140608.c new file mode 100644 index 000000000..03764f9bf --- /dev/null +++ b/src/ov_SC06_029/ov_SC06_029_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801DA494; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8018C800[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801DB89C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801E2120; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801DA494; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8018C538)(); +extern s16 (*D_8018C53C)(); +extern M2C_UNK (*D_8018C544)(); +extern s32 (*D_8018C548)(); +extern s32 D_801DB898; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801DA498; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8018C894; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_8018FD78; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018C8AC; +extern M2C_UNK D_8018C8B4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8018C8BC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018C8D8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8018C8E4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8018C8F8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018C948[]; +extern s16 D_8018C978[]; +extern s16 D_8018C9D8[]; +extern s16 D_8018C9E0[]; +extern s16 D_8018CA00[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8018CA38[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8018CA90[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8018CAD8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8018CAE0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8018CAE8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8018CAF0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8018CA98; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8018CAB8; +extern void func_801321B0(int param_1); +extern int D_8018CAC8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801DB908; +extern s32 D_801DB90C[]; +extern int D_801DB910; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8018CAFC; +extern u8 D_8018CAF8; +extern s16 *D_8018CB00; +extern u8 D_8018CB04; +extern int D_801DB908; +extern u16 D_801DB918; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8018CB00; /* holds a pointer value (*(u16**)&D_8018CB00) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8018CB14[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8018CB68; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018CB6C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8018CBB0; +extern u8 D_8018CBF4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8018CC38[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8018CCB0, D_8018CCB2, D_8018CCB4, D_8018CCB6, D_8018CCB8, D_8018CCBA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801DB980; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801DB984; +extern s8 D_801DB985; +extern void func_8013C9C4(void * arg0); +extern s32 D_801DB9A4; +extern s32 D_801DB998; +extern s32 D_801DB99C; +extern s32 D_801DB9A8; +extern void func_8013CABC(void); +extern s32 D_801DB9A0; +extern void func_8013CAE8(void); +extern s32 D_801DB9D0; +extern s32 D_801DB9D4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801DB9B0; +extern s32 D_801DB9B4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801E211A; +extern u8 D_801E218E; +extern u8 D_801E2042; +extern u8 D_801E20FC; +extern u8 D_801E2020; +extern u8 D_801E2041; +extern s32 D_801E2100; +extern void func_8013D330(void); +extern void *D_801DB988; +extern void *D_801DB98C; +extern void *D_801DB990; +extern s32 D_801DB9B8; +extern s32 D_801DB9BC; +extern s32 D_801DB9C0; +extern s32 D_801E2074[]; +extern u8 D_8018CDA8[]; +extern u8 D_8018CE50[]; +extern u8 D_8018CD00[]; +extern u8 D_8018CDFC[]; +extern u8 D_8018CE7C[]; +extern u8 D_8018CD54[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801DB994; +extern s32 D_801DB9C4; +extern s32 D_801DB9C8; +extern s32 D_801DB9CC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801DB9AC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8018D908; +extern s32 D_80115188; +extern s16 D_8018D8E0; +extern s16 D_8018D8E2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8018D8E4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8018D5C0; +extern u8 *D_8018D5C4; +extern u8 *D_8018D5C8; +extern u8 *D_8018D5CC; +extern u8 *D_8018D5D0; +extern u16 *D_8018D5D4[]; +extern u16 *D_8018D5DC[]; +extern u16 *D_8018D5FC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018D5C0; + iVar2 = func_80028D58(); + puVar3 = D_8018D5D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018D5C4; + iVar2 = func_80028DE0(); + puVar3 = D_8018D5D4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018D5C8 + 0x18) = *D_8018D5DC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018D5CC + 0x18) = *D_8018D5DC[iVar2]; + + puVar1 = D_8018D5D0; + iVar2 = func_80028D9C(); + puVar3 = D_8018D5FC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018D4FC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018D4FC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018D50C; +extern char *D_8018D52C; +extern char *D_8018D530; +extern char *D_8018D534; +extern char *D_8018D538; +extern char *D_8018D53C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018D50C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018D52C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D530; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D534; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D538; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018D53C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018D3C6; +extern unsigned short D_8018D3CA; +extern unsigned short D_8018D3CE; +extern unsigned short D_8018D3D2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018D3C6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D3CA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D3CE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018D3D2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018D95C[])(void); + +void func_80141788(void) +{ + D_8018D95C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018D968[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018D968[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8018D8E0; +extern s16 D_8018D8E2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018D580; + extern u8 D_8018D598; + extern u8 D_8018D60C; + extern u8 D_8018D614; + extern void *D_801DB9E0; + extern void *D_801DB9E4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801DB9E0 = &D_8018D580; + D_801DB9E4 = &D_8018D60C; + } else { + D_801DB9E0 = &D_8018D598; + D_801DB9E4 = &D_8018D614; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018D8E0 = 0xE; + D_8018D8E2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018D8E4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8018D8E4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018D8E4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8018D8BC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8018D8BC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018D98C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018D98C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018D99C[])(void); + +void func_801425CC(void *a0) { + D_8018D99C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8018D980; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018D980); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018D9B0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018D9B0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018D9CC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018D9CC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DB9C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DB9C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018DC54[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018DC54[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801DAE24; +extern u8 D_801DB9E8; +extern u8 D_801DB9E9; +extern u8 D_801DB9EA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801DAE24; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801DB9E8 = mul * (local.b[0] >> 4); + D_801DB9E9 = mul * (local.b[1] >> 4); + D_801DB9EA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8018D9A4; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018D9A4); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018D9C0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018D9C0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018DB8C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018DB8C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018DBAC[]; +extern unsigned char D_8018DC0C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018DBAC); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018DC0C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801DAE20; +extern u8 D_801DB9E8; +extern u8 D_801DB9EC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801DAE20, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801DB9E8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801DB9E8, 0x10); + memcpy(&D_801DB9EC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8018DD64[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018DD64[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018DE8C[])(void); + +void func_80143B30(void *a0) { + D_8018DE8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8018DE98[])(void); + +void func_80143C38(void *a0) { + D_8018DE98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8018DEA0[])(void); + +void func_80143C98(void *a0) { + D_8018DEA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80143D28); + + +extern void (*D_8018DEE8[])(void); + +void func_80143E68(void *a0) { + D_8018DEE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018DEFC[])(void); + +void func_80144054(void *a0) { + D_8018DEFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8018DF04[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8018DF04[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018DE80; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018DE80, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8018DE94; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018DE94 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018DE94 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8018DEA8; +extern u8 D_8018DEB4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018DEA8); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018DEB4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8018DE80; +extern u8 D_8018DEF0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018DE80, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018DEF0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018DF0C[])(void); + +void func_801449C8(void *a0) { + D_8018DF0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8018DF14[])(void); + +void func_80144A2C(void *a0) { + D_8018DF14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c b/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c index d8cf656fc..29b1b0225 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80182EB0; -extern u8 *D_80182EB4; -extern u8 *D_80182EB8; -extern u8 *D_80182EBC; -extern u8 *D_80182EC0; -extern u16 *D_80182EC4[]; -extern u16 *D_80182ECC[]; -extern u16 *D_80182EEC[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80182EB0; - iVar2 = func_80028D58(); - puVar3 = D_80182EC4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80182EB4; - iVar2 = func_80028DE0(); - puVar3 = D_80182EC4[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80182EB8 + 0x18) = *D_80182ECC[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80182EBC + 0x18) = *D_80182ECC[iVar2]; - - puVar1 = D_80182EC0; - iVar2 = func_80028D9C(); - puVar3 = D_80182EEC[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80182DEC; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80182DEC); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80182DFC; -extern char *D_80182E1C; -extern char *D_80182E20; -extern char *D_80182E24; -extern char *D_80182E28; -extern char *D_80182E2C; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80182DFC); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80182E1C; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E20; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E24; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E28; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182E2C; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80182CB6; -extern unsigned short D_80182CBA; -extern unsigned short D_80182CBE; -extern unsigned short D_80182CC2; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80182CB6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80182CBA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182CBE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182CC2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8018324C[])(void); - -void func_80141788(void) -{ - D_8018324C[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183258[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183258[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801831D0; -extern s16 D_801831D2; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182E70; - extern u8 D_80182E88; - extern u8 D_80182EFC; - extern u8 D_80182F04; - extern void *D_801B8C40; - extern void *D_801B8C44; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801B8C40 = &D_80182E70; - D_801B8C44 = &D_80182EFC; - } else { - D_801B8C40 = &D_80182E88; - D_801B8C44 = &D_80182F04; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801831D0 = 0xE; - D_801831D2 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801831D4: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801831D4; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801831D4); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801831AC; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801831AC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018327C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018327C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8018328C[])(void); - -void func_801425CC(void *a0) { - D_8018328C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183270; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183270); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801832A0[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801832A0[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801832BC[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801832BC[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018348C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018348C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183544[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183544[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801B8188; -extern u8 D_801B8C48; -extern u8 D_801B8C49; -extern u8 D_801B8C4A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801B8188; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801B8C48 = mul * (local.b[0] >> 4); - D_801B8C49 = mul * (local.b[1] >> 4); - D_801B8C4A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80183294; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183294); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_801832B0[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801832B0); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018347C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018347C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8018349C[]; -extern unsigned char D_801834FC[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018349C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801834FC); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801B8184; -extern u8 D_801B8C48; -extern u8 D_801B8C4C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801B8184, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8C48); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801B8C48, 0x10); - memcpy(&D_801B8C4C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183654[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183654[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018377C[])(void); - -void func_80143B30(void *a0) { - D_8018377C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183788[])(void); - -void func_80143C38(void *a0) { - D_80183788[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183790[])(void); - -void func_80143C98(void *a0) { - D_80183790[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80143D28); - - -extern void (*D_801837D8[])(void); - -void func_80143E68(void *a0) { - D_801837D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801837EC[])(void); - -void func_80144054(void *a0) { - D_801837EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801837F4[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801837F4[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183770; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183770, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183784; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183784 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183784 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183798; -extern u8 D_801837A4; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183798); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_801837A4); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183770; -extern u8 D_801837E0; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183770, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801837E0, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801837FC[])(void); - -void func_801449C8(void *a0) { - D_801837FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80183804[])(void); - -void func_80144A2C(void *a0) { - D_80183804[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_030/ov_SC06_030_jr_80140608.c b/src/ov_SC06_030/ov_SC06_030_jr_80140608.c new file mode 100644 index 000000000..1ba72473b --- /dev/null +++ b/src/ov_SC06_030/ov_SC06_030_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801B77F8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801820F0[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801B8AFC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801BA018; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801B77F8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80181E2C)(); +extern s16 (*D_80181E30)(); +extern M2C_UNK (*D_80181E38)(); +extern s32 (*D_80181E3C)(); +extern s32 D_801B8AF8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801B77FC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80182184; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185668; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8018219C; +extern M2C_UNK D_801821A4; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801821AC; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801821C8[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801821D4[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801821E8[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182238[]; +extern s16 D_80182268[]; +extern s16 D_801822C8[]; +extern s16 D_801822D0[]; +extern s16 D_801822F0[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182328[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182380[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_801823C8[])(void); +extern void func_80131F28(void *a0); +extern void (*D_801823D0[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801823D8[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801823E0[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182388; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_801823A8; +extern void func_801321B0(int param_1); +extern int D_801823B8; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801B8B68; +extern s32 D_801B8B6C[]; +extern int D_801B8B70; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801823EC; +extern u8 D_801823E8; +extern s16 *D_801823F0; +extern u8 D_801823F4; +extern int D_801B8B68; +extern u16 D_801B8B78; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801823F0; /* holds a pointer value (*(u16**)&D_801823F0) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182404[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182458; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8018245C[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_801824A0; +extern u8 D_801824E4; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182528[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_801825A0, D_801825A2, D_801825A4, D_801825A6, D_801825A8, D_801825AA; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801B8BE0; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801B8BE4; +extern s8 D_801B8BE5; +extern void func_8013C9C4(void * arg0); +extern s32 D_801B8C04; +extern s32 D_801B8BF8; +extern s32 D_801B8BFC; +extern s32 D_801B8C08; +extern void func_8013CABC(void); +extern s32 D_801B8C00; +extern void func_8013CAE8(void); +extern s32 D_801B8C30; +extern s32 D_801B8C34; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801B8C10; +extern s32 D_801B8C14; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801BA012; +extern u8 D_801BA086; +extern u8 D_801B9F3A; +extern u8 D_801B9FF4; +extern u8 D_801B9F18; +extern u8 D_801B9F39; +extern s32 D_801B9FF8; +extern void func_8013D330(void); +extern void *D_801B8BE8; +extern void *D_801B8BEC; +extern void *D_801B8BF0; +extern s32 D_801B8C18; +extern s32 D_801B8C1C; +extern s32 D_801B8C20; +extern s32 D_801B9F6C[]; +extern u8 D_80182698[]; +extern u8 D_80182740[]; +extern u8 D_801825F0[]; +extern u8 D_801826EC[]; +extern u8 D_8018276C[]; +extern u8 D_80182644[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801B8BF4; +extern s32 D_801B8C24; +extern s32 D_801B8C28; +extern s32 D_801B8C2C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801B8C0C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801831F8; +extern s32 D_80115188; +extern s16 D_801831D0; +extern s16 D_801831D2; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801831D4; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80182EB0; +extern u8 *D_80182EB4; +extern u8 *D_80182EB8; +extern u8 *D_80182EBC; +extern u8 *D_80182EC0; +extern u16 *D_80182EC4[]; +extern u16 *D_80182ECC[]; +extern u16 *D_80182EEC[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80182EB0; + iVar2 = func_80028D58(); + puVar3 = D_80182EC4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80182EB4; + iVar2 = func_80028DE0(); + puVar3 = D_80182EC4[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80182EB8 + 0x18) = *D_80182ECC[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80182EBC + 0x18) = *D_80182ECC[iVar2]; + + puVar1 = D_80182EC0; + iVar2 = func_80028D9C(); + puVar3 = D_80182EEC[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80182DEC; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80182DEC); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80182DFC; +extern char *D_80182E1C; +extern char *D_80182E20; +extern char *D_80182E24; +extern char *D_80182E28; +extern char *D_80182E2C; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80182DFC); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80182E1C; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E20; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E24; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E28; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182E2C; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80182CB6; +extern unsigned short D_80182CBA; +extern unsigned short D_80182CBE; +extern unsigned short D_80182CC2; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80182CB6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80182CBA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182CBE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182CC2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8018324C[])(void); + +void func_80141788(void) +{ + D_8018324C[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183258[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183258[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801831D0; +extern s16 D_801831D2; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182E70; + extern u8 D_80182E88; + extern u8 D_80182EFC; + extern u8 D_80182F04; + extern void *D_801B8C40; + extern void *D_801B8C44; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801B8C40 = &D_80182E70; + D_801B8C44 = &D_80182EFC; + } else { + D_801B8C40 = &D_80182E88; + D_801B8C44 = &D_80182F04; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801831D0 = 0xE; + D_801831D2 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801831D4: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801831D4; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801831D4); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801831AC; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801831AC + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018327C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018327C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8018328C[])(void); + +void func_801425CC(void *a0) { + D_8018328C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183270; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183270); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801832A0[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801832A0[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801832BC[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801832BC[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018348C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018348C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183544[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183544[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801B8188; +extern u8 D_801B8C48; +extern u8 D_801B8C49; +extern u8 D_801B8C4A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801B8188; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801B8C48 = mul * (local.b[0] >> 4); + D_801B8C49 = mul * (local.b[1] >> 4); + D_801B8C4A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80183294; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183294); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_801832B0[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_801832B0); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018347C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018347C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8018349C[]; +extern unsigned char D_801834FC[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018349C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801834FC); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801B8184; +extern u8 D_801B8C48; +extern u8 D_801B8C4C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801B8184, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801B8C48); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801B8C48, 0x10); + memcpy(&D_801B8C4C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183654[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183654[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018377C[])(void); + +void func_80143B30(void *a0) { + D_8018377C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183788[])(void); + +void func_80143C38(void *a0) { + D_80183788[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183790[])(void); + +void func_80143C98(void *a0) { + D_80183790[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80143D28); + + +extern void (*D_801837D8[])(void); + +void func_80143E68(void *a0) { + D_801837D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801837EC[])(void); + +void func_80144054(void *a0) { + D_801837EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801837F4[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801837F4[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183770; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183770, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183784; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183784 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183784 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183798; +extern u8 D_801837A4; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183798); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_801837A4); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183770; +extern u8 D_801837E0; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183770, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801837E0, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801837FC[])(void); + +void func_801449C8(void *a0) { + D_801837FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80183804[])(void); + +void func_80144A2C(void *a0) { + D_80183804[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c b/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c index 8eb1e0965..ebf2fece7 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8019437C; -extern u8 *D_80194380; -extern u8 *D_80194384; -extern u8 *D_80194388; -extern u8 *D_8019438C; -extern u16 *D_80194390[]; -extern u16 *D_80194398[]; -extern u16 *D_801943B8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8019437C; - iVar2 = func_80028D58(); - puVar3 = D_80194390[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80194380; - iVar2 = func_80028DE0(); - puVar3 = D_80194390[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80194384 + 0x18) = *D_80194398[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80194388 + 0x18) = *D_80194398[iVar2]; - - puVar1 = D_8019438C; - iVar2 = func_80028D9C(); - puVar3 = D_801943B8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801942B8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801942B8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801942C8; -extern char *D_801942E8; -extern char *D_801942EC; -extern char *D_801942F0; -extern char *D_801942F4; -extern char *D_801942F8; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801942C8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801942E8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801942EC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801942F0; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801942F4; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801942F8; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80194182; -extern unsigned short D_80194186; -extern unsigned short D_8019418A; -extern unsigned short D_8019418E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80194182; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80194186; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019418A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019418E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80194718[])(void); - -void func_80141788(void) -{ - D_80194718[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80194724[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80194724[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8019469C; -extern s16 D_8019469E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8019433C; - extern u8 D_80194354; - extern u8 D_801943C8; - extern u8 D_801943D0; - extern void *D_801CF2F0; - extern void *D_801CF2F4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CF2F0 = &D_8019433C; - D_801CF2F4 = &D_801943C8; - } else { - D_801CF2F0 = &D_80194354; - D_801CF2F4 = &D_801943D0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8019469C = 0xE; - D_8019469E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801946A0: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801946A0; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801946A0); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80194678; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80194678 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80194748[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80194748[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80194758[])(void); - -void func_801425CC(void *a0) { - D_80194758[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8019473C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8019473C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8019476C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8019476C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80194788[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80194788[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80194958[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80194958[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80194A10[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80194A10[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CE7E4; -extern u8 D_801CF2F8; -extern u8 D_801CF2F9; -extern u8 D_801CF2FA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CE7E4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CF2F8 = mul * (local.b[0] >> 4); - D_801CF2F9 = mul * (local.b[1] >> 4); - D_801CF2FA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80194760; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80194760); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8019477C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8019477C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80194948[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80194948[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80194968[]; -extern unsigned char D_801949C8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80194968); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801949C8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CE7E0; -extern u8 D_801CF2F8; -extern u8 D_801CF2FC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CE7E0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CF2F8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CF2F8, 0x10); - memcpy(&D_801CF2FC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80194B20[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80194B20[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80194C48[])(void); - -void func_80143B30(void *a0) { - D_80194C48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80194C54[])(void); - -void func_80143C38(void *a0) { - D_80194C54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80194C5C[])(void); - -void func_80143C98(void *a0) { - D_80194C5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80143D28); - - -extern void (*D_80194CA4[])(void); - -void func_80143E68(void *a0) { - D_80194CA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80194CB8[])(void); - -void func_80144054(void *a0) { - D_80194CB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80194CC0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80194CC0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80194C3C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80194C3C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80194C50; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80194C50 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80194C50 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80194C64; -extern u8 D_80194C70; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80194C64); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80194C70); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80194C3C; -extern u8 D_80194CAC; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80194C3C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80194CAC, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80194CC8[])(void); - -void func_801449C8(void *a0) { - D_80194CC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80194CD0[])(void); - -void func_80144A2C(void *a0) { - D_80194CD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_032/ov_SC06_032_jr_80140608.c b/src/ov_SC06_032/ov_SC06_032_jr_80140608.c new file mode 100644 index 000000000..c159ebaf6 --- /dev/null +++ b/src/ov_SC06_032/ov_SC06_032_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CDE54; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801935BC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CF1AC; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D1100; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CDE54; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801932F8)(); +extern s16 (*D_801932FC)(); +extern M2C_UNK (*D_80193304)(); +extern s32 (*D_80193308)(); +extern s32 D_801CF1A8; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CDE58; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80193650; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80196B34; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80193668; +extern M2C_UNK D_80193670; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80193678; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80193694[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801936A0[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801936B4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80193704[]; +extern s16 D_80193734[]; +extern s16 D_80193794[]; +extern s16 D_8019379C[]; +extern s16 D_801937BC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801937F4[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8019384C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80193894[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8019389C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_801938A4[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_801938AC[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80193854; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80193874; +extern void func_801321B0(int param_1); +extern int D_80193884; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CF218; +extern s32 D_801CF21C[]; +extern int D_801CF220; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_801938B8; +extern u8 D_801938B4; +extern s16 *D_801938BC; +extern u8 D_801938C0; +extern int D_801CF218; +extern u16 D_801CF228; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_801938BC; /* holds a pointer value (*(u16**)&D_801938BC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_801938D0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80193924; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80193928[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8019396C; +extern u8 D_801939B0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_801939F4[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80193A6C, D_80193A6E, D_80193A70, D_80193A72, D_80193A74, D_80193A76; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CF290; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CF294; +extern s8 D_801CF295; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CF2B4; +extern s32 D_801CF2A8; +extern s32 D_801CF2AC; +extern s32 D_801CF2B8; +extern void func_8013CABC(void); +extern s32 D_801CF2B0; +extern void func_8013CAE8(void); +extern s32 D_801CF2E0; +extern s32 D_801CF2E4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CF2C0; +extern s32 D_801CF2C4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D10FA; +extern u8 D_801D116E; +extern u8 D_801D1022; +extern u8 D_801D10DC; +extern u8 D_801D1000; +extern u8 D_801D1021; +extern s32 D_801D10E0; +extern void func_8013D330(void); +extern void *D_801CF298; +extern void *D_801CF29C; +extern void *D_801CF2A0; +extern s32 D_801CF2C8; +extern s32 D_801CF2CC; +extern s32 D_801CF2D0; +extern s32 D_801D1054[]; +extern u8 D_80193B64[]; +extern u8 D_80193C0C[]; +extern u8 D_80193ABC[]; +extern u8 D_80193BB8[]; +extern u8 D_80193C38[]; +extern u8 D_80193B10[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CF2A4; +extern s32 D_801CF2D4; +extern s32 D_801CF2D8; +extern s32 D_801CF2DC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CF2BC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801946C4; +extern s32 D_80115188; +extern s16 D_8019469C; +extern s16 D_8019469E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801946A0; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8019437C; +extern u8 *D_80194380; +extern u8 *D_80194384; +extern u8 *D_80194388; +extern u8 *D_8019438C; +extern u16 *D_80194390[]; +extern u16 *D_80194398[]; +extern u16 *D_801943B8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8019437C; + iVar2 = func_80028D58(); + puVar3 = D_80194390[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80194380; + iVar2 = func_80028DE0(); + puVar3 = D_80194390[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80194384 + 0x18) = *D_80194398[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80194388 + 0x18) = *D_80194398[iVar2]; + + puVar1 = D_8019438C; + iVar2 = func_80028D9C(); + puVar3 = D_801943B8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801942B8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801942B8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801942C8; +extern char *D_801942E8; +extern char *D_801942EC; +extern char *D_801942F0; +extern char *D_801942F4; +extern char *D_801942F8; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801942C8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801942E8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801942EC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801942F0; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801942F4; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801942F8; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80194182; +extern unsigned short D_80194186; +extern unsigned short D_8019418A; +extern unsigned short D_8019418E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80194182; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80194186; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019418A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019418E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80194718[])(void); + +void func_80141788(void) +{ + D_80194718[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80194724[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80194724[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8019469C; +extern s16 D_8019469E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8019433C; + extern u8 D_80194354; + extern u8 D_801943C8; + extern u8 D_801943D0; + extern void *D_801CF2F0; + extern void *D_801CF2F4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CF2F0 = &D_8019433C; + D_801CF2F4 = &D_801943C8; + } else { + D_801CF2F0 = &D_80194354; + D_801CF2F4 = &D_801943D0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8019469C = 0xE; + D_8019469E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801946A0: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801946A0; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801946A0); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80194678; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80194678 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80194748[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80194748[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80194758[])(void); + +void func_801425CC(void *a0) { + D_80194758[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8019473C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8019473C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8019476C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8019476C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80194788[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80194788[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80194958[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80194958[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80194A10[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80194A10[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CE7E4; +extern u8 D_801CF2F8; +extern u8 D_801CF2F9; +extern u8 D_801CF2FA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CE7E4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CF2F8 = mul * (local.b[0] >> 4); + D_801CF2F9 = mul * (local.b[1] >> 4); + D_801CF2FA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80194760; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80194760); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8019477C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8019477C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80194948[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80194948[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80194968[]; +extern unsigned char D_801949C8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80194968); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801949C8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CE7E0; +extern u8 D_801CF2F8; +extern u8 D_801CF2FC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CE7E0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CF2F8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CF2F8, 0x10); + memcpy(&D_801CF2FC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80194B20[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80194B20[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80194C48[])(void); + +void func_80143B30(void *a0) { + D_80194C48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80194C54[])(void); + +void func_80143C38(void *a0) { + D_80194C54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80194C5C[])(void); + +void func_80143C98(void *a0) { + D_80194C5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80143D28); + + +extern void (*D_80194CA4[])(void); + +void func_80143E68(void *a0) { + D_80194CA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80194CB8[])(void); + +void func_80144054(void *a0) { + D_80194CB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80194CC0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80194CC0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80194C3C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80194C3C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80194C50; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80194C50 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80194C50 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80194C64; +extern u8 D_80194C70; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80194C64); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80194C70); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80194C3C; +extern u8 D_80194CAC; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80194C3C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80194CAC, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80194CC8[])(void); + +void func_801449C8(void *a0) { + D_80194CC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80194CD0[])(void); + +void func_80144A2C(void *a0) { + D_80194CD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c b/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c index 3266567d9..56b74de3f 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8019288C; -extern u8 *D_80192890; -extern u8 *D_80192894; -extern u8 *D_80192898; -extern u8 *D_8019289C; -extern u16 *D_801928A0[]; -extern u16 *D_801928A8[]; -extern u16 *D_801928C8[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8019288C; - iVar2 = func_80028D58(); - puVar3 = D_801928A0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80192890; - iVar2 = func_80028DE0(); - puVar3 = D_801928A0[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80192894 + 0x18) = *D_801928A8[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80192898 + 0x18) = *D_801928A8[iVar2]; - - puVar1 = D_8019289C; - iVar2 = func_80028D9C(); - puVar3 = D_801928C8[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801927C8; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801927C8); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801927D8; -extern char *D_801927F8; -extern char *D_801927FC; -extern char *D_80192800; -extern char *D_80192804; -extern char *D_80192808; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801927D8); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801927F8; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801927FC; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80192800; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80192804; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80192808; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80192692; -extern unsigned short D_80192696; -extern unsigned short D_8019269A; -extern unsigned short D_8019269E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80192692; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80192696; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019269A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8019269E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80192C28[])(void); - -void func_80141788(void) -{ - D_80192C28[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80192C34[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80192C34[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80192BAC; -extern s16 D_80192BAE; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8019284C; - extern u8 D_80192864; - extern u8 D_801928D8; - extern u8 D_801928E0; - extern void *D_801CF3B0; - extern void *D_801CF3B4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CF3B0 = &D_8019284C; - D_801CF3B4 = &D_801928D8; - } else { - D_801CF3B0 = &D_80192864; - D_801CF3B4 = &D_801928E0; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80192BAC = 0xE; - D_80192BAE = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80192BB0: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80192BB0; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80192BB0); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80192B88; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80192B88 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80192C58[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80192C58[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80192C68[])(void); - -void func_801425CC(void *a0) { - D_80192C68[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80192C4C; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80192C4C); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80192C7C[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80192C7C[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80192C98[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80192C98[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80192E68[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80192E68[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80192F20[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80192F20[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CE898; -extern u8 D_801CF3B8; -extern u8 D_801CF3B9; -extern u8 D_801CF3BA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CE898; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CF3B8 = mul * (local.b[0] >> 4); - D_801CF3B9 = mul * (local.b[1] >> 4); - D_801CF3BA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80192C70; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80192C70); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80192C8C[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80192C8C); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80192E58[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80192E58[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80192E78[]; -extern unsigned char D_80192ED8[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80192E78); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80192ED8); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CE894; -extern u8 D_801CF3B8; -extern u8 D_801CF3BC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CE894, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CF3B8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CF3B8, 0x10); - memcpy(&D_801CF3BC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80193030[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80193030[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80193158[])(void); - -void func_80143B30(void *a0) { - D_80193158[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80193164[])(void); - -void func_80143C38(void *a0) { - D_80193164[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8019316C[])(void); - -void func_80143C98(void *a0) { - D_8019316C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80143D28); - - -extern void (*D_801931B4[])(void); - -void func_80143E68(void *a0) { - D_801931B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_801931C8[])(void); - -void func_80144054(void *a0) { - D_801931C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_801931D0[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_801931D0[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8019314C; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8019314C, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80193160; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80193160 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80193160 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80193174; -extern u8 D_80193180; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80193174); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80193180); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8019314C; -extern u8 D_801931BC; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8019314C, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801931BC, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_801931D8[])(void); - -void func_801449C8(void *a0) { - D_801931D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_801931E0[])(void); - -void func_80144A2C(void *a0) { - D_801931E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC06_033/ov_SC06_033_jr_80140608.c b/src/ov_SC06_033/ov_SC06_033_jr_80140608.c new file mode 100644 index 000000000..137df4aeb --- /dev/null +++ b/src/ov_SC06_033/ov_SC06_033_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CDF08; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80191ACC[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CF26C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D0F80; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CDF08; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80191808)(); +extern s16 (*D_8019180C)(); +extern M2C_UNK (*D_80191814)(); +extern s32 (*D_80191818)(); +extern s32 D_801CF268; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CDF0C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80191B60; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80195044; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80191B78; +extern M2C_UNK D_80191B80; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80191B88; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80191BA4[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80191BB0[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80191BC4[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80191C14[]; +extern s16 D_80191C44[]; +extern s16 D_80191CA4[]; +extern s16 D_80191CAC[]; +extern s16 D_80191CCC[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80191D04[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80191D5C[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80191DA4[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80191DAC[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80191DB4[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80191DBC[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80191D64; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80191D84; +extern void func_801321B0(int param_1); +extern int D_80191D94; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CF2D8; +extern s32 D_801CF2DC[]; +extern int D_801CF2E0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80191DC8; +extern u8 D_80191DC4; +extern s16 *D_80191DCC; +extern u8 D_80191DD0; +extern int D_801CF2D8; +extern u16 D_801CF2E8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80191DCC; /* holds a pointer value (*(u16**)&D_80191DCC) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80191DE0[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80191E34; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80191E38[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80191E7C; +extern u8 D_80191EC0; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80191F04[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80191F7C, D_80191F7E, D_80191F80, D_80191F82, D_80191F84, D_80191F86; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CF350; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CF354; +extern s8 D_801CF355; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CF374; +extern s32 D_801CF368; +extern s32 D_801CF36C; +extern s32 D_801CF378; +extern void func_8013CABC(void); +extern s32 D_801CF370; +extern void func_8013CAE8(void); +extern s32 D_801CF3A0; +extern s32 D_801CF3A4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CF380; +extern s32 D_801CF384; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D0F7A; +extern u8 D_801D0FEE; +extern u8 D_801D0EA2; +extern u8 D_801D0F5C; +extern u8 D_801D0E80; +extern u8 D_801D0EA1; +extern s32 D_801D0F60; +extern void func_8013D330(void); +extern void *D_801CF358; +extern void *D_801CF35C; +extern void *D_801CF360; +extern s32 D_801CF388; +extern s32 D_801CF38C; +extern s32 D_801CF390; +extern s32 D_801D0ED4[]; +extern u8 D_80192074[]; +extern u8 D_8019211C[]; +extern u8 D_80191FCC[]; +extern u8 D_801920C8[]; +extern u8 D_80192148[]; +extern u8 D_80192020[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CF364; +extern s32 D_801CF394; +extern s32 D_801CF398; +extern s32 D_801CF39C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CF37C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80192BD4; +extern s32 D_80115188; +extern s16 D_80192BAC; +extern s16 D_80192BAE; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80192BB0; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8019288C; +extern u8 *D_80192890; +extern u8 *D_80192894; +extern u8 *D_80192898; +extern u8 *D_8019289C; +extern u16 *D_801928A0[]; +extern u16 *D_801928A8[]; +extern u16 *D_801928C8[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8019288C; + iVar2 = func_80028D58(); + puVar3 = D_801928A0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80192890; + iVar2 = func_80028DE0(); + puVar3 = D_801928A0[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80192894 + 0x18) = *D_801928A8[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80192898 + 0x18) = *D_801928A8[iVar2]; + + puVar1 = D_8019289C; + iVar2 = func_80028D9C(); + puVar3 = D_801928C8[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801927C8; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801927C8); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801927D8; +extern char *D_801927F8; +extern char *D_801927FC; +extern char *D_80192800; +extern char *D_80192804; +extern char *D_80192808; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801927D8); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801927F8; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801927FC; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80192800; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80192804; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80192808; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80192692; +extern unsigned short D_80192696; +extern unsigned short D_8019269A; +extern unsigned short D_8019269E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80192692; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80192696; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019269A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8019269E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80192C28[])(void); + +void func_80141788(void) +{ + D_80192C28[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80192C34[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80192C34[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80192BAC; +extern s16 D_80192BAE; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8019284C; + extern u8 D_80192864; + extern u8 D_801928D8; + extern u8 D_801928E0; + extern void *D_801CF3B0; + extern void *D_801CF3B4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CF3B0 = &D_8019284C; + D_801CF3B4 = &D_801928D8; + } else { + D_801CF3B0 = &D_80192864; + D_801CF3B4 = &D_801928E0; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80192BAC = 0xE; + D_80192BAE = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80192BB0: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80192BB0; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80192BB0); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80192B88; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80192B88 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80192C58[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80192C58[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80192C68[])(void); + +void func_801425CC(void *a0) { + D_80192C68[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80192C4C; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80192C4C); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80192C7C[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80192C7C[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80192C98[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80192C98[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80192E68[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80192E68[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80192F20[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80192F20[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CE898; +extern u8 D_801CF3B8; +extern u8 D_801CF3B9; +extern u8 D_801CF3BA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CE898; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CF3B8 = mul * (local.b[0] >> 4); + D_801CF3B9 = mul * (local.b[1] >> 4); + D_801CF3BA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80192C70; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80192C70); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80192C8C[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80192C8C); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80192E58[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80192E58[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80192E78[]; +extern unsigned char D_80192ED8[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80192E78); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80192ED8); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CE894; +extern u8 D_801CF3B8; +extern u8 D_801CF3BC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CE894, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CF3B8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CF3B8, 0x10); + memcpy(&D_801CF3BC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80193030[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80193030[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80193158[])(void); + +void func_80143B30(void *a0) { + D_80193158[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80193164[])(void); + +void func_80143C38(void *a0) { + D_80193164[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8019316C[])(void); + +void func_80143C98(void *a0) { + D_8019316C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80143D28); + + +extern void (*D_801931B4[])(void); + +void func_80143E68(void *a0) { + D_801931B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_801931C8[])(void); + +void func_80144054(void *a0) { + D_801931C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_801931D0[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_801931D0[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019314C; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8019314C, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80193160; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80193160 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80193160 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80193174; +extern u8 D_80193180; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80193174); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80193180); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8019314C; +extern u8 D_801931BC; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8019314C, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801931BC, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_801931D8[])(void); + +void func_801449C8(void *a0) { + D_801931D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_801931E0[])(void); + +void func_80144A2C(void *a0) { + D_801931E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8013FFD8.c b/src/ov_SC07_000/ov_SC07_000_jr_8013FFD8.c index 04936f351..3f66e155b 100644 --- a/src/ov_SC07_000/ov_SC07_000_jr_8013FFD8.c +++ b/src/ov_SC07_000/ov_SC07_000_jr_8013FFD8.c @@ -1091,1167 +1091,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_801836D4; -extern u8 *D_801836D8; -extern u8 *D_801836DC; -extern u8 *D_801836E0; -extern u8 *D_801836E4; -extern u16 *D_801836E8[]; -extern u16 *D_801836F0[]; -extern u16 *D_80183710[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_801836D4; - iVar2 = func_80028D58(); - puVar3 = D_801836E8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_801836D8; - iVar2 = func_80028DE0(); - puVar3 = D_801836E8[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_801836DC + 0x18) = *D_801836F0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_801836E0 + 0x18) = *D_801836F0[iVar2]; - - puVar1 = D_801836E4; - iVar2 = func_80028D9C(); - puVar3 = D_80183710[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_80183610; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183610); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_80183620; -extern char *D_80183640; -extern char *D_80183644; -extern char *D_80183648; -extern char *D_8018364C; -extern char *D_80183650; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183620); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183640; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183644; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183648; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018364C; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183650; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_801834DA; -extern unsigned short D_801834DE; -extern unsigned short D_801834E2; -extern unsigned short D_801834E6; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_801834DA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_801834DE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_801834E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_801834E6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80183A70[])(void); - -void func_80141788(void) -{ - D_80183A70[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80183A7C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80183A7C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801839F4; -extern s16 D_801839F6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80183694; - extern u8 D_801836AC; - extern u8 D_80183720; - extern u8 D_80183728; - extern void *D_801CE8F8; - extern void *D_801CE8FC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801CE8F8 = &D_80183694; - D_801CE8FC = &D_80183720; - } else { - D_801CE8F8 = &D_801836AC; - D_801CE8FC = &D_80183728; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801839F4 = 0xE; - D_801839F6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801839F8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801839F8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801839F8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_801839D0; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_801839D0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80183AA0[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80183AA0[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80183AB0[])(void); - -void func_801425CC(void *a0) { - D_80183AB0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80183A94; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80183A94); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183AC4[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183AC4[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183AE0[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183AE0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183CB0[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183CB0[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80183D68[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80183D68[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801CDEF4; -extern u8 D_801CE900; -extern u8 D_801CE901; -extern u8 D_801CE902; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801CDEF4; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801CE900 = mul * (local.b[0] >> 4); - D_801CE901 = mul * (local.b[1] >> 4); - D_801CE902 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80183AB8; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183AB8); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183AD4[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183AD4); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80183CA0[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80183CA0[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80183CC0[]; -extern unsigned char D_80183D20[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183CC0); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183D20); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801CDEF0; -extern u8 D_801CE900; -extern u8 D_801CE904; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801CDEF0, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801CE900); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801CE900, 0x10); - memcpy(&D_801CE904, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80183E78[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80183E78[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80183FA0[])(void); - -void func_80143B30(void *a0) { - D_80183FA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80183FAC[])(void); - -void func_80143C38(void *a0) { - D_80183FAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80183FB4[])(void); - -void func_80143C98(void *a0) { - D_80183FB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80143D28); - - -extern void (*D_80183FFC[])(void); - -void func_80143E68(void *a0) { - D_80183FFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80184010[])(void); - -void func_80144054(void *a0) { - D_80184010[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80184018[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80184018[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80183F94; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80183F94, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80183FA8; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183FA8 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183FA8 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80183FBC; -extern u8 D_80183FC8; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183FBC); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183FC8); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80183F94; -extern u8 D_80184004; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80183F94, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80184004, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80184020[])(void); - -void func_801449C8(void *a0) { - D_80184020[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80184028[])(void); - -void func_80144A2C(void *a0) { - D_80184028[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC07_000/ov_SC07_000_jr_80140608.c b/src/ov_SC07_000/ov_SC07_000_jr_80140608.c new file mode 100644 index 000000000..142f450ca --- /dev/null +++ b/src/ov_SC07_000/ov_SC07_000_jr_80140608.c @@ -0,0 +1,2209 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801CD564; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80182914[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801CE7B4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801D0C78; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801CD564; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80182650)(); +extern s16 (*D_80182654)(); +extern M2C_UNK (*D_8018265C)(); +extern s32 (*D_80182660)(); +extern s32 D_801CE7B0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801CD568; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_801829A8; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80185E8C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_801829C0; +extern M2C_UNK D_801829C8; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_801829D0; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_801829EC[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801829F8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80182A0C[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80182A5C[]; +extern s16 D_80182A8C[]; +extern s16 D_80182AEC[]; +extern s16 D_80182AF4[]; +extern s16 D_80182B14[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80182B4C[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80182BA4[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80182BEC[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80182BF4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80182BFC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80182C04[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80182BAC; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80182BCC; +extern void func_801321B0(int param_1); +extern int D_80182BDC; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801CE820; +extern s32 D_801CE824[]; +extern int D_801CE828; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80182C10; +extern u8 D_80182C0C; +extern s16 *D_80182C14; +extern u8 D_80182C18; +extern int D_801CE820; +extern u16 D_801CE830; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80182C14; /* holds a pointer value (*(u16**)&D_80182C14) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80182C28[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80182C7C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80182C80[])(void); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80182CC4; +extern u8 D_80182D08; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80182D4C[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80182DC4, D_80182DC6, D_80182DC8, D_80182DCA, D_80182DCC, D_80182DCE; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801CE898; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801CE89C; +extern s8 D_801CE89D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801CE8BC; +extern s32 D_801CE8B0; +extern s32 D_801CE8B4; +extern s32 D_801CE8C0; +extern void func_8013CABC(void); +extern s32 D_801CE8B8; +extern void func_8013CAE8(void); +extern s32 D_801CE8E8; +extern s32 D_801CE8EC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801CE8C8; +extern s32 D_801CE8CC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801D0C72; +extern u8 D_801D0CE6; +extern u8 D_801D0B92; +extern u8 D_801D0C54; +extern u8 D_801D0B68; +extern u8 D_801D0B91; +extern s32 D_801D0C58; +extern void func_8013D330(void); +extern void *D_801CE8A0; +extern void *D_801CE8A4; +extern void *D_801CE8A8; +extern s32 D_801CE8D0; +extern s32 D_801CE8D4; +extern s32 D_801CE8D8; +extern s32 D_801D0BCC[]; +extern u8 D_80182EBC[]; +extern u8 D_80182F64[]; +extern u8 D_80182E14[]; +extern u8 D_80182F10[]; +extern u8 D_80182F90[]; +extern u8 D_80182E68[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801CE8AC; +extern s32 D_801CE8DC; +extern s32 D_801CE8E0; +extern s32 D_801CE8E4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801CE8C4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80183A1C; +extern s32 D_80115188; +extern s16 D_801839F4; +extern s16 D_801839F6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801839F8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_801836D4; +extern u8 *D_801836D8; +extern u8 *D_801836DC; +extern u8 *D_801836E0; +extern u8 *D_801836E4; +extern u16 *D_801836E8[]; +extern u16 *D_801836F0[]; +extern u16 *D_80183710[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_801836D4; + iVar2 = func_80028D58(); + puVar3 = D_801836E8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_801836D8; + iVar2 = func_80028DE0(); + puVar3 = D_801836E8[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_801836DC + 0x18) = *D_801836F0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_801836E0 + 0x18) = *D_801836F0[iVar2]; + + puVar1 = D_801836E4; + iVar2 = func_80028D9C(); + puVar3 = D_80183710[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_80183610; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183610); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_80183620; +extern char *D_80183640; +extern char *D_80183644; +extern char *D_80183648; +extern char *D_8018364C; +extern char *D_80183650; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183620); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183640; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183644; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183648; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018364C; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183650; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_801834DA; +extern unsigned short D_801834DE; +extern unsigned short D_801834E2; +extern unsigned short D_801834E6; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_801834DA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_801834DE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_801834E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_801834E6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80183A70[])(void); + +void func_80141788(void) +{ + D_80183A70[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80183A7C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80183A7C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801839F4; +extern s16 D_801839F6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80183694; + extern u8 D_801836AC; + extern u8 D_80183720; + extern u8 D_80183728; + extern void *D_801CE8F8; + extern void *D_801CE8FC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801CE8F8 = &D_80183694; + D_801CE8FC = &D_80183720; + } else { + D_801CE8F8 = &D_801836AC; + D_801CE8FC = &D_80183728; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801839F4 = 0xE; + D_801839F6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801839F8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801839F8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801839F8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_801839D0; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_801839D0 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80183AA0[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80183AA0[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80183AB0[])(void); + +void func_801425CC(void *a0) { + D_80183AB0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80183A94; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80183A94); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183AC4[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183AC4[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183AE0[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183AE0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183CB0[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183CB0[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80183D68[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80183D68[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801CDEF4; +extern u8 D_801CE900; +extern u8 D_801CE901; +extern u8 D_801CE902; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801CDEF4; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801CE900 = mul * (local.b[0] >> 4); + D_801CE901 = mul * (local.b[1] >> 4); + D_801CE902 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80183AB8; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80183AB8); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183AD4[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183AD4); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80183CA0[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80183CA0[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80183CC0[]; +extern unsigned char D_80183D20[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183CC0); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183D20); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801CDEF0; +extern u8 D_801CE900; +extern u8 D_801CE904; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801CDEF0, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801CE900); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801CE900, 0x10); + memcpy(&D_801CE904, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80183E78[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80183E78[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80183FA0[])(void); + +void func_80143B30(void *a0) { + D_80183FA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80183FAC[])(void); + +void func_80143C38(void *a0) { + D_80183FAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80183FB4[])(void); + +void func_80143C98(void *a0) { + D_80183FB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80143D28); + + +extern void (*D_80183FFC[])(void); + +void func_80143E68(void *a0) { + D_80183FFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80184010[])(void); + +void func_80144054(void *a0) { + D_80184010[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80184018[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80184018[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183F94; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80183F94, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80183FA8; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80183FA8 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80183FA8 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80183FBC; +extern u8 D_80183FC8; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183FBC); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80183FC8); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80183F94; +extern u8 D_80184004; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80183F94, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80184004, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80184020[])(void); + +void func_801449C8(void *a0) { + D_80184020[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80184028[])(void); + +void func_80144A2C(void *a0) { + D_80184028[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c b/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c index f6e3790ed..cf864d420 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80182584; -extern u8 *D_80182588; -extern u8 *D_8018258C; -extern u8 *D_80182590; -extern u8 *D_80182594; -extern u16 *D_80182598[]; -extern u16 *D_801825A0[]; -extern u16 *D_801825C0[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80182584; - iVar2 = func_80028D58(); - puVar3 = D_80182598[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80182588; - iVar2 = func_80028DE0(); - puVar3 = D_80182598[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018258C + 0x18) = *D_801825A0[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80182590 + 0x18) = *D_801825A0[iVar2]; - - puVar1 = D_80182594; - iVar2 = func_80028D9C(); - puVar3 = D_801825C0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_801824C0; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_801824C0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_801824D0; -extern char *D_801824F0; -extern char *D_801824F4; -extern char *D_801824F8; -extern char *D_801824FC; -extern char *D_80182500; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_801824D0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801824F0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801824F4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801824F8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801824FC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182500; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8018238A; -extern unsigned short D_8018238E; -extern unsigned short D_80182392; -extern unsigned short D_80182396; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018238A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018238E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182392; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182396; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80182920[])(void); - -void func_80141788(void) -{ - D_80182920[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8018292C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018292C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_801828A4; -extern s16 D_801828A6; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182544; - extern u8 D_8018255C; - extern u8 D_801825D0; - extern u8 D_801825D8; - extern void *D_801A99A8; - extern void *D_801A99AC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A99A8 = &D_80182544; - D_801A99AC = &D_801825D0; - } else { - D_801A99A8 = &D_8018255C; - D_801A99AC = &D_801825D8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801828A4 = 0xE; - D_801828A6 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801828A8: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_801828A8; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801828A8); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80182880; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80182880 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80182950[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80182950[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80182960[])(void); - -void func_801425CC(void *a0) { - D_80182960[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80182944; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80182944); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182974[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182974[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182990[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182990[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182B60[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182B60[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80182C18[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80182C18[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A9090; -extern u8 D_801A99B0; -extern u8 D_801A99B1; -extern u8 D_801A99B2; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A9090; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A99B0 = mul * (local.b[0] >> 4); - D_801A99B1 = mul * (local.b[1] >> 4); - D_801A99B2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80182968; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80182968); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80182984[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80182984); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80182B50[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80182B50[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80182B70[]; -extern unsigned char D_80182BD0[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182B70); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80182BD0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A908C; -extern u8 D_801A99B0; -extern u8 D_801A99B4; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A908C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A99B0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A99B0, 0x10); - memcpy(&D_801A99B4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80182D28[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80182D28[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_80182E50[])(void); - -void func_80143B30(void *a0) { - D_80182E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80182E5C[])(void); - -void func_80143C38(void *a0) { - D_80182E5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80182E64[])(void); - -void func_80143C98(void *a0) { - D_80182E64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80143D28); - - -extern void (*D_80182EAC[])(void); - -void func_80143E68(void *a0) { - D_80182EAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_80182EC0[])(void); - -void func_80144054(void *a0) { - D_80182EC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80182EC8[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80182EC8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80182E44; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80182E44, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80182E58; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182E58 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182E58 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80182E6C; -extern u8 D_80182E78; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182E6C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182E78); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80182E44; -extern u8 D_80182EB4; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80182E44, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80182EB4, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_80182ED0[])(void); - -void func_801449C8(void *a0) { - D_80182ED0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80182ED8[])(void); - -void func_80144A2C(void *a0) { - D_80182ED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC07_001/ov_SC07_001_jr_80140608.c b/src/ov_SC07_001/ov_SC07_001_jr_80140608.c new file mode 100644 index 000000000..3b5ec5d87 --- /dev/null +++ b/src/ov_SC07_001/ov_SC07_001_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A8700; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_801817C4[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A9864; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801AAEA0; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A8700; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_80181500)(); +extern s16 (*D_80181504)(); +extern M2C_UNK (*D_8018150C)(); +extern s32 (*D_80181510)(); +extern s32 D_801A9860; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A8704; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80181858; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80184D3C; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80181870; +extern M2C_UNK D_80181878; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80181880; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8018189C[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_801818A8[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_801818BC[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8018190C[]; +extern s16 D_8018193C[]; +extern s16 D_8018199C[]; +extern s16 D_801819A4[]; +extern s16 D_801819C4[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_801819FC[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80181A54[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80181A9C[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80181AA4[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80181AAC[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80181AB4[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80181A5C; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80181A7C; +extern void func_801321B0(int param_1); +extern int D_80181A8C; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A98D0; +extern s32 D_801A98D4[]; +extern int D_801A98D8; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80181AC0; +extern u8 D_80181ABC; +extern s16 *D_80181AC4; +extern u8 D_80181AC8; +extern int D_801A98D0; +extern u16 D_801A98E0; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80181AC4; /* holds a pointer value (*(u16**)&D_80181AC4) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80181AD8[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80181B2C; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80181B30[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80181B74; +extern u8 D_80181BB8; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80181BFC[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80181C74, D_80181C76, D_80181C78, D_80181C7A, D_80181C7C, D_80181C7E; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A9948; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A994C; +extern s8 D_801A994D; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A996C; +extern s32 D_801A9960; +extern s32 D_801A9964; +extern s32 D_801A9970; +extern void func_8013CABC(void); +extern s32 D_801A9968; +extern void func_8013CAE8(void); +extern s32 D_801A9998; +extern s32 D_801A999C; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A9978; +extern s32 D_801A997C; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801AAE9A; +extern u8 D_801AAF0E; +extern u8 D_801AADC2; +extern u8 D_801AAE7C; +extern u8 D_801AADA0; +extern u8 D_801AADC1; +extern s32 D_801AAE80; +extern void func_8013D330(void); +extern void *D_801A9950; +extern void *D_801A9954; +extern void *D_801A9958; +extern s32 D_801A9980; +extern s32 D_801A9984; +extern s32 D_801A9988; +extern s32 D_801AADF4[]; +extern u8 D_80181D6C[]; +extern u8 D_80181E14[]; +extern u8 D_80181CC4[]; +extern u8 D_80181DC0[]; +extern u8 D_80181E40[]; +extern u8 D_80181D18[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A995C; +extern s32 D_801A998C; +extern s32 D_801A9990; +extern s32 D_801A9994; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A9974; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_801828CC; +extern s32 D_80115188; +extern s16 D_801828A4; +extern s16 D_801828A6; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_801828A8; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80182584; +extern u8 *D_80182588; +extern u8 *D_8018258C; +extern u8 *D_80182590; +extern u8 *D_80182594; +extern u16 *D_80182598[]; +extern u16 *D_801825A0[]; +extern u16 *D_801825C0[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80182584; + iVar2 = func_80028D58(); + puVar3 = D_80182598[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80182588; + iVar2 = func_80028DE0(); + puVar3 = D_80182598[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018258C + 0x18) = *D_801825A0[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80182590 + 0x18) = *D_801825A0[iVar2]; + + puVar1 = D_80182594; + iVar2 = func_80028D9C(); + puVar3 = D_801825C0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_801824C0; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_801824C0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_801824D0; +extern char *D_801824F0; +extern char *D_801824F4; +extern char *D_801824F8; +extern char *D_801824FC; +extern char *D_80182500; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_801824D0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801824F0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801824F4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801824F8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801824FC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182500; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8018238A; +extern unsigned short D_8018238E; +extern unsigned short D_80182392; +extern unsigned short D_80182396; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018238A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018238E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182392; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182396; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80182920[])(void); + +void func_80141788(void) +{ + D_80182920[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8018292C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018292C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_801828A4; +extern s16 D_801828A6; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182544; + extern u8 D_8018255C; + extern u8 D_801825D0; + extern u8 D_801825D8; + extern void *D_801A99A8; + extern void *D_801A99AC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A99A8 = &D_80182544; + D_801A99AC = &D_801825D0; + } else { + D_801A99A8 = &D_8018255C; + D_801A99AC = &D_801825D8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801828A4 = 0xE; + D_801828A6 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801828A8: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_801828A8; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801828A8); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80182880; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80182880 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80182950[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80182950[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80182960[])(void); + +void func_801425CC(void *a0) { + D_80182960[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80182944; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80182944); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182974[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182974[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182990[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182990[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182B60[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182B60[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80182C18[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80182C18[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A9090; +extern u8 D_801A99B0; +extern u8 D_801A99B1; +extern u8 D_801A99B2; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A9090; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A99B0 = mul * (local.b[0] >> 4); + D_801A99B1 = mul * (local.b[1] >> 4); + D_801A99B2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80182968; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80182968); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80182984[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80182984); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80182B50[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80182B50[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80182B70[]; +extern unsigned char D_80182BD0[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80182B70); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80182BD0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A908C; +extern u8 D_801A99B0; +extern u8 D_801A99B4; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A908C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A99B0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A99B0, 0x10); + memcpy(&D_801A99B4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80182D28[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80182D28[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_80182E50[])(void); + +void func_80143B30(void *a0) { + D_80182E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80182E5C[])(void); + +void func_80143C38(void *a0) { + D_80182E5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80182E64[])(void); + +void func_80143C98(void *a0) { + D_80182E64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80143D28); + + +extern void (*D_80182EAC[])(void); + +void func_80143E68(void *a0) { + D_80182EAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_80182EC0[])(void); + +void func_80144054(void *a0) { + D_80182EC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80182EC8[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80182EC8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182E44; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80182E44, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80182E58; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80182E58 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80182E58 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80182E6C; +extern u8 D_80182E78; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80182E6C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80182E78); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80182E44; +extern u8 D_80182EB4; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80182E44, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80182EB4, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_80182ED0[])(void); + +void func_801449C8(void *a0) { + D_80182ED0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80182ED8[])(void); + +void func_80144A2C(void *a0) { + D_80182ED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c b/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c index 7253490df..60050caa1 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_80187840; -extern u8 *D_80187844; -extern u8 *D_80187848; -extern u8 *D_8018784C; -extern u8 *D_80187850; -extern u16 *D_80187854[]; -extern u16 *D_8018785C[]; -extern u16 *D_8018787C[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80187840; - iVar2 = func_80028D58(); - puVar3 = D_80187854[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80187844; - iVar2 = func_80028DE0(); - puVar3 = D_80187854[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80187848 + 0x18) = *D_8018785C[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018784C + 0x18) = *D_8018785C[iVar2]; - - puVar1 = D_80187850; - iVar2 = func_80028D9C(); - puVar3 = D_8018787C[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8018777C; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018777C); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8018778C; -extern char *D_801877AC; -extern char *D_801877B0; -extern char *D_801877B4; -extern char *D_801877B8; -extern char *D_801877BC; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018778C); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_801877AC; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801877B0; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801877B4; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801877B8; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_801877BC; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_80187646; -extern unsigned short D_8018764A; -extern unsigned short D_8018764E; -extern unsigned short D_80187652; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80187646; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018764A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018764E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80187652; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_80187BDC[])(void); - -void func_80141788(void) -{ - D_80187BDC[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_80187BE8[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80187BE8[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_80187B60; -extern s16 D_80187B62; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80187800; - extern u8 D_80187818; - extern u8 D_8018788C; - extern u8 D_80187894; - extern void *D_8019A4F8; - extern void *D_8019A4FC; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8019A4F8 = &D_80187800; - D_8019A4FC = &D_8018788C; - } else { - D_8019A4F8 = &D_80187818; - D_8019A4FC = &D_80187894; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80187B60 = 0xE; - D_80187B62 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_80187B64: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_80187B64; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_80187B64); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_80187B3C; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_80187B3C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80187C0C[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80187C0C[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_80187C1C[])(void); - -void func_801425CC(void *a0) { - D_80187C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_80187C00; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80187C00); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187C30[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187C30[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187C4C[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187C4C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187E1C[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187E1C[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80187ED4[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80187ED4[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80199A78; -extern u8 D_8019A500; -extern u8 D_8019A501; -extern u8 D_8019A502; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80199A78; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8019A500 = mul * (local.b[0] >> 4); - D_8019A501 = mul * (local.b[1] >> 4); - D_8019A502 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_80187C24; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187C24); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187C40[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187C40); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80187E0C[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80187E0C[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_80187E2C[]; -extern unsigned char D_80187E8C[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187E2C); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80187E8C); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80199A74; -extern u8 D_8019A500; -extern u8 D_8019A504; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80199A74, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8019A500); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8019A500, 0x10); - memcpy(&D_8019A504, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_80187FE4[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80187FE4[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8018810C[])(void); - -void func_80143B30(void *a0) { - D_8018810C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_80188118[])(void); - -void func_80143C38(void *a0) { - D_80188118[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_80188120[])(void); - -void func_80143C98(void *a0) { - D_80188120[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80143D28); - - -extern void (*D_80188168[])(void); - -void func_80143E68(void *a0) { - D_80188168[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8018817C[])(void); - -void func_80144054(void *a0) { - D_8018817C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_80188184[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_80188184[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80188100; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80188100, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_80188114; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188114 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188114 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_80188128; -extern u8 D_80188134; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188128); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188134); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_80188100; -extern u8 D_80188170; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80188100, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80188170, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8018818C[])(void); - -void func_801449C8(void *a0) { - D_8018818C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_80188194[])(void); - -void func_80144A2C(void *a0) { - D_80188194[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC07_002/ov_SC07_002_jr_80140608.c b/src/ov_SC07_002/ov_SC07_002_jr_80140608.c new file mode 100644 index 000000000..3e8fac448 --- /dev/null +++ b/src/ov_SC07_002/ov_SC07_002_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801990E8; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_80186A80[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019A3B4; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A0068; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801990E8; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_801867BC)(); +extern s16 (*D_801867C0)(); +extern M2C_UNK (*D_801867C8)(); +extern s32 (*D_801867CC)(); +extern s32 D_8019A3B0; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801990EC; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_80186B14; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80189FF8; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_80186B2C; +extern M2C_UNK D_80186B34; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_80186B3C; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_80186B58[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_80186B64[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_80186B78[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_80186BC8[]; +extern s16 D_80186BF8[]; +extern s16 D_80186C58[]; +extern s16 D_80186C60[]; +extern s16 D_80186C80[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_80186CB8[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_80186D10[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_80186D58[])(void); +extern void func_80131F28(void *a0); +extern void (*D_80186D60[])(void); +extern void func_80131F64(void *a0); +extern void (*D_80186D68[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_80186D70[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_80186D18; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_80186D38; +extern void func_801321B0(int param_1); +extern int D_80186D48; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_8019A420; +extern s32 D_8019A424[]; +extern int D_8019A428; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_80186D7C; +extern u8 D_80186D78; +extern s16 *D_80186D80; +extern u8 D_80186D84; +extern int D_8019A420; +extern u16 D_8019A430; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_80186D80; /* holds a pointer value (*(u16**)&D_80186D80) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_80186D94[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_80186DE8; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_80186DEC[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_80186E30; +extern u8 D_80186E74; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_80186EB8[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_80186F30, D_80186F32, D_80186F34, D_80186F36, D_80186F38, D_80186F3A; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_8019A498; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_8019A49C; +extern s8 D_8019A49D; +extern void func_8013C9C4(void * arg0); +extern s32 D_8019A4BC; +extern s32 D_8019A4B0; +extern s32 D_8019A4B4; +extern s32 D_8019A4C0; +extern void func_8013CABC(void); +extern s32 D_8019A4B8; +extern void func_8013CAE8(void); +extern s32 D_8019A4E8; +extern s32 D_8019A4EC; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_8019A4C8; +extern s32 D_8019A4CC; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A0062; +extern u8 D_801A00D6; +extern u8 D_8019FF8C; +extern u8 D_801A0044; +extern u8 D_8019FF68; +extern u8 D_8019FF89; +extern s32 D_801A0048; +extern void func_8013D330(void); +extern void *D_8019A4A0; +extern void *D_8019A4A4; +extern void *D_8019A4A8; +extern s32 D_8019A4D0; +extern s32 D_8019A4D4; +extern s32 D_8019A4D8; +extern s32 D_8019FFBC[]; +extern u8 D_80187028[]; +extern u8 D_801870D0[]; +extern u8 D_80186F80[]; +extern u8 D_8018707C[]; +extern u8 D_801870FC[]; +extern u8 D_80186FD4[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_8019A4AC; +extern s32 D_8019A4DC; +extern s32 D_8019A4E0; +extern s32 D_8019A4E4; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_8019A4C4; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_80187B88; +extern s32 D_80115188; +extern s16 D_80187B60; +extern s16 D_80187B62; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_80187B64; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_80187840; +extern u8 *D_80187844; +extern u8 *D_80187848; +extern u8 *D_8018784C; +extern u8 *D_80187850; +extern u16 *D_80187854[]; +extern u16 *D_8018785C[]; +extern u16 *D_8018787C[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80187840; + iVar2 = func_80028D58(); + puVar3 = D_80187854[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80187844; + iVar2 = func_80028DE0(); + puVar3 = D_80187854[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80187848 + 0x18) = *D_8018785C[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018784C + 0x18) = *D_8018785C[iVar2]; + + puVar1 = D_80187850; + iVar2 = func_80028D9C(); + puVar3 = D_8018787C[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8018777C; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018777C); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8018778C; +extern char *D_801877AC; +extern char *D_801877B0; +extern char *D_801877B4; +extern char *D_801877B8; +extern char *D_801877BC; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018778C); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_801877AC; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801877B0; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801877B4; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801877B8; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_801877BC; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_80187646; +extern unsigned short D_8018764A; +extern unsigned short D_8018764E; +extern unsigned short D_80187652; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80187646; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018764A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018764E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80187652; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_80187BDC[])(void); + +void func_80141788(void) +{ + D_80187BDC[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_80187BE8[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80187BE8[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_80187B60; +extern s16 D_80187B62; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80187800; + extern u8 D_80187818; + extern u8 D_8018788C; + extern u8 D_80187894; + extern void *D_8019A4F8; + extern void *D_8019A4FC; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8019A4F8 = &D_80187800; + D_8019A4FC = &D_8018788C; + } else { + D_8019A4F8 = &D_80187818; + D_8019A4FC = &D_80187894; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80187B60 = 0xE; + D_80187B62 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_80187B64: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_80187B64; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_80187B64); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_80187B3C; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_80187B3C + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80187C0C[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80187C0C[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_80187C1C[])(void); + +void func_801425CC(void *a0) { + D_80187C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_80187C00; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80187C00); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187C30[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187C30[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187C4C[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187C4C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187E1C[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187E1C[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80187ED4[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80187ED4[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80199A78; +extern u8 D_8019A500; +extern u8 D_8019A501; +extern u8 D_8019A502; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80199A78; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8019A500 = mul * (local.b[0] >> 4); + D_8019A501 = mul * (local.b[1] >> 4); + D_8019A502 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_80187C24; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187C24); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187C40[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80187C40); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80187E0C[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80187E0C[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_80187E2C[]; +extern unsigned char D_80187E8C[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80187E2C); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80187E8C); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80199A74; +extern u8 D_8019A500; +extern u8 D_8019A504; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80199A74, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8019A500); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8019A500, 0x10); + memcpy(&D_8019A504, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_80187FE4[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80187FE4[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8018810C[])(void); + +void func_80143B30(void *a0) { + D_8018810C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_80188118[])(void); + +void func_80143C38(void *a0) { + D_80188118[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_80188120[])(void); + +void func_80143C98(void *a0) { + D_80188120[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80143D28); + + +extern void (*D_80188168[])(void); + +void func_80143E68(void *a0) { + D_80188168[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8018817C[])(void); + +void func_80144054(void *a0) { + D_8018817C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_80188184[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_80188184[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188100; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80188100, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80188114; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_80188114 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_80188114 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_80188128; +extern u8 D_80188134; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80188128); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_80188134); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_80188100; +extern u8 D_80188170; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80188100, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80188170, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8018818C[])(void); + +void func_801449C8(void *a0) { + D_8018818C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_80188194[])(void); + +void func_80144A2C(void *a0) { + D_80188194[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c index b064718fe..8aacc9ce6 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c @@ -1217,3762 +1217,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - - extern u8 *D_8018B464; - extern u8 *D_8018B468; - extern u8 *D_8018B46C; - extern u8 *D_8018B470; - extern u8 *D_8018B474; - extern u16 *D_8018B478[]; - extern u16 *D_8018B480[]; - extern u16 *D_8018B4A0[]; - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8018B464; - iVar2 = func_80028D58(); - puVar3 = D_8018B478[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018B468; - iVar2 = func_80028DE0(); - puVar3 = D_8018B478[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8018B46C + 0x18) = *D_8018B480[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8018B470 + 0x18) = *D_8018B480[iVar2]; - - puVar1 = D_8018B474; - iVar2 = func_80028D9C(); - puVar3 = D_8018B4A0[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - - extern unsigned char D_80078E7F; - extern unsigned char D_80078E7E; - extern unsigned char D_80078E7D; - extern M2C_UNK D_8018B3A0; - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8018B3A0); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - - extern short D_80115128; - extern u8 D_8018B3B0; - extern char *D_8018B3D0; - extern char *D_8018B3D4; - extern char *D_8018B3D8; - extern char *D_8018B3DC; - extern char *D_8018B3E0; - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8018B3B0); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8018B3D0; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B3D4; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B3D8; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B3DC; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8018B3E0; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - - -// @class: other -// @stuck: none — MATCH - - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - - extern short D_80115128; - extern unsigned short D_80115172; - extern unsigned short D_8018B26A; - extern unsigned short D_8018B26E; - extern unsigned short D_8018B272; - extern unsigned short D_8018B276; - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8018B26A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B26E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B272; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8018B276; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ - - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ - - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ - - - - -void func_80141788(void) -{ - - extern unsigned short D_80115112; - extern void (*D_8018B800[])(void); - D_8018B800[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ - - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ - - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - - -void func_80141874(void) { - - extern u16 D_8011511E; - extern u16 D_8011511C; - extern unsigned short D_80115112; - extern u16 D_80115116; - extern void (*D_8018B80C[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8018B80C[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8018B424; - extern u8 D_8018B43C; - extern u8 D_8018B4B0; - extern u8 D_8018B4B8; - extern s16 D_8018B784; - extern s16 D_8018B786; - extern void *D_801F4EA0; - extern void *D_801F4EA4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801F4EA0 = &D_8018B424; - D_801F4EA4 = &D_8018B4B0; - } else { - D_801F4EA0 = &D_8018B43C; - D_801F4EA4 = &D_8018B4B8; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8018B784 = 0xE; - D_8018B786 = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018B788: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8018B788; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018B788); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80141B90); - -void func_80141C04(void) { -} - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - - extern u16 D_80115110; - extern u8 D_8018B760; - func_8002D4C8(*(u16 *)(&D_8018B760 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ - - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ - - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8018B830[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8018B830[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - - -void func_801425CC(void *a0) { - - extern void (*D_8018B840[])(void); - D_8018B840[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); - -void func_80142608(s32 param_1) -{ - - extern s32 D_8018B824; - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8018B824); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ - - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - - -void func_801427DC(void) { -} - -void func_801427E4(void) { -} - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801427EC(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8018B854[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8018B854[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80142838); - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_8014292C(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8018B870[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8018B870[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_80142978(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8018BA40[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8018BA40[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801429C4(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8018BAF8[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8018BAF8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - - -void func_80142A80(void) -{ - - extern u16 D_800B99D8; - extern struct packed_word D_801F44FC; - extern u8 D_801F4EA8; - extern u8 D_801F4EA9; - extern u8 D_801F4EAA; - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801F44FC; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801F4EA8 = mul * (local.b[0] >> 4); - D_801F4EA9 = mul * (local.b[1] >> 4); - D_801F4EAA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80142B2C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80142BB4); - -void func_80142C7C(void) { -} - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ - - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ - - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ - - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142DC4(int param_1) -{ - - extern int D_8018B848; - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018B848); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142E38(int param_1) -{ - - extern unsigned char D_8018B864[]; - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018B864); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8018BA30[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8018BA30[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80142F68); - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_8014305C(int param_1) -{ - - extern unsigned char D_8018BA50[]; - extern unsigned char D_8018BAB0[]; - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018BA50); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8018BAB0); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801430F4); - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - - -void func_801431E8(s32 param_1) { - - extern u8 D_801F44F8; - extern u8 D_801F4EA8; - extern u8 D_801F4EAC; - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801F44F8, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801F4EA8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801F4EA8, 0x10); - memcpy(&D_801F4EAC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ - - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801433F0); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - - extern u8 D_800D387C[]; - extern u32 D_8018BC08[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018BC08[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014350C); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_8014358C(s32 param_1) -{ - - extern u8 D_8018BC18[]; - extern u32 D_8018BD14[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_8018BC18; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018BD14[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ - - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ - - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ - - - - -void func_80143B30(void *a0) { - - extern void (*D_8018BD30[])(void); - D_8018BD30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ - - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ - - - - -void func_80143C38(void *a0) { - - extern void (*D_8018BD3C[])(void); - D_8018BD3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ - - - - -void func_80143C98(void *a0) { - - extern void (*D_8018BD44[])(void); - D_8018BD44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80143D28); - - - -void func_80143E68(void *a0) { - - extern void (*D_8018BD8C[])(void); - D_8018BD8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80143EA4(void) { -} - -void func_80143EAC(void) { -} - -void func_80143EB4(void) { -} - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ - - - - -void func_80144054(void *a0) { - - extern void (*D_8018BDA0[])(void); - D_8018BDA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - - -void func_801442F8(int param_1) -{ - - extern void (*D_8018BDA8[])(); - int iVar1; - - D_8018BDA8[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -void func_80144364(int param_1) { - - extern u8 D_8018BD24; - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8018BD24, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80144458); - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014462C); - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); - -void func_8014477C(void *param_1) { - - extern u8 D_8018BD4C; - extern u8 D_8018BD58; - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018BD4C); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018BD58); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - - -void func_80144880(s32 param_1) -{ - - extern u8 D_8018BD24; - extern u8 D_8018BD94; - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8018BD24, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8018BD94, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - - - -void func_801449C8(void *a0) { - - extern void (*D_8018BDB0[])(void); - D_8018BDB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ - - - - -void func_80144A2C(void *a0) { - - extern void (*D_8018BDB8[])(void); - D_8018BDB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ - - -void func_80144A90(void) { -} - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ - - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80144B14); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80144B9C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801457A4); - -void func_801458E0(void) { -} - -DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_8018C944 block defeats the tail-merge of the two identical D_8018C944 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145934(void) { - - extern u8 D_8018C944; - extern u8 D_8018C8B4; - extern u8 D_8018C890; - extern u8 D_8018C86C; - extern u8 D_8018C920; - extern u8 D_8018C8FC; - extern u8 D_8018C8D8; - extern u8 D_8018C848; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_8018C944; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_8018C944 load from being - * tail-merged with the v>=0x384 D_8018C944 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_8018C8B4; - } else if (v >= 0x578) { - p = &D_8018C890; - } else if (v >= 0x514) { - p = &D_8018C86C; - } else if (v >= 0x384) { - p = &D_8018C944; - } else if (v >= 0x258) { - p = &D_8018C920; - } else if (v >= 0xC8) { - p = &D_8018C8FC; - } else if (v >= 0xA) { - p = &D_8018C8D8; - } else { - p = &D_8018C848; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_8018C9D4 block defeats the tail-merge of the two identical D_8018C9D4 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145A2C(void) { - - extern u8 D_8018C9D4; - extern u8 D_8018C8B4; - extern u8 D_8018C890; - extern u8 D_8018C86C; - extern u8 D_8018C9B0; - extern u8 D_8018C98C; - extern u8 D_8018C968; - extern u8 D_8018C848; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_8018C9D4; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_8018C9D4 load from being - * tail-merged with the v>=0x384 D_8018C9D4 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_8018C8B4; - } else if (v >= 0x578) { - p = &D_8018C890; - } else if (v >= 0x514) { - p = &D_8018C86C; - } else if (v >= 0x384) { - p = &D_8018C9D4; - } else if (v >= 0x258) { - p = &D_8018C9B0; - } else if (v >= 0xC8) { - p = &D_8018C98C; - } else if (v >= 0xA) { - p = &D_8018C968; - } else { - p = &D_8018C848; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - -DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ - - -DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ - - -DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80145CEC); - - - -// @class: schedule -// @stuck: branch layout — 3-way dispatch on param_1; trying switch form - -extern s32 func_80029178(s32 arg); -extern void func_80146014(s32 a0); - - -void func_80145EE8(s32 param_1) -{ - - extern unsigned char D_8018BDCC[]; - extern unsigned char D_8018BDFC[]; - extern unsigned char D_8018BE4C[]; - extern unsigned char D_8018BE7C[]; - extern unsigned char D_8018BEAC[]; - switch (param_1) { - case 0: - if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { - ((void (*)(void *))func_80146014)(D_8018BDCC); - } - if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { - ((void (*)(void *))func_80146014)(D_8018BDFC); - } - if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { - ((void (*)(void *))func_80146014)(D_8018BE4C); - } - if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { - ((void (*)(void *))func_80146014)(D_8018BE7C); - } - if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { - return; - } - ((void (*)(void *))func_80146014)(D_8018BEAC); - break; - case 1: - ((void (*)(void *))func_80146014)(D_8018BDCC); - ((void (*)(void *))func_80146014)(D_8018BDFC); - ((void (*)(void *))func_80146014)(D_8018BE4C); - ((void (*)(void *))func_80146014)(D_8018BE7C); - ((void (*)(void *))func_80146014)(D_8018BEAC); - break; - } -} - - -DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ - - -void func_80146074(void) { -} - - -extern s32 func_80146128(void); -extern void func_80146360(void); -extern void func_801463A0(void); - -void func_8014607C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146128\n" - "lui $at, %%hi(D_801F4EE8)\n" - "sw $v0, %%lo(D_801F4EE8)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801F4EE8)\n" - "lw $v0, %%lo(D_801F4EE8)($v0)\n" - "nop\n" - "beqz $v0, .L80146114\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146360\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_801463A0\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - ".L80146114:\n" - "nop\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (fnptr-table idiom: D_8018BEFC[u8 idx](&arg)) - -void func_80146360(void) -{ - - extern void (*D_8018BEFC[])(void *); - extern u8 D_80126BA4; - extern s32 D_80126B58; - D_8018BEFC[D_80126BA4](&D_80126B58); -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801463A0); - -DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ - - -DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ - - -DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ - - -DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ - - -DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ - - -DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ - - -DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ - - -DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801466F0); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80146750); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014680C); - -DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ - - -DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ - - -DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ - - -DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80146A6C); - -DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80146AFC); - -DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ - - -DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ - - -DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ - - -DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ - - -DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ - - -DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ - - -DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ - - -DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ - - -DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ - - -DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ - - -DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ - - -DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ - - -DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ - - -DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ - - -DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80146F58); - -DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ - - -DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ - - -DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ - - -DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ - - -DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ - - -DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ - - -DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ - - -DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ - - -DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ - - -DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ - - -DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ - - -DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ - - -DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ - - -DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ - - -DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ - - -DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ - - -DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ - - -DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ - - -DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ - - -DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ - - -DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ - - -DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80147364); - -DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ - - -DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ - - -DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ - - -DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ - - -DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ - - -DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ - - -DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ - - -DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ - - -DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ - - -DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ - - -DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ - - -DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ - - -DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ - - -DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ - - -DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ - - -DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ - - -DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ - - -DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ - - -DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ - - -DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ - - -DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ - - -DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ - - -DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ - - -DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ - - -DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ - - -DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ - - -DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ - - -DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ - - -DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ - - -DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ - - -DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ - - -DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ - - -DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ - - -DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ - - -DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ - - -DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801483E8); - -DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ - - -DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ - - -DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ - - -DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ - - -DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ - - -DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ - - -DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ - - -DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ - - -DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ - - -DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ - - -DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ - - -DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ - - -DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ - - -DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ - - -DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ - - -DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ - - -DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ - - -DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg - -extern s32 ratan2(s32 a0, s32 a1); - -int func_80148AFC(void *a0) { - - extern s32 D_801151D4; - extern ActorFn D_8018BF04[]; - s32 p = (s32)a0; - s32 iVar5 = *(s32 *)(p + 0x20); - register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 sVar3; - u8 bVar1; - __asm__("" : "=r"(tmp) : "0"(tmp)); - sVar3 = tmp; - bVar1 = *(u8 *)(p + 0xA9); - - switch (bVar1) { - case 0x41: - return D_8018BF04[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; - case 0x53: - case 0x73: - { - register u32 bb __asm__("$3"); - register s32 c80 __asm__("$2") = 0x80; - register s32 lo __asm__("$4"); - register s32 hi __asm__("$2"); - bb = *(u16 *)(p + 0xAE); - lo = bb & 0xFF; - if (lo != c80 || (hi = bb >> 8) != 0x80) { - s32 sVar4; - __asm__ __volatile__("" : : : "memory"); - sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); - *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; - return 1; - } - return 0; - } - } -} - - -DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ - - -DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ - - -DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ - - -DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ - - -DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ - - -DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ - - -DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ - - -DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ - - -DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ - - -DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ - - -DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ - - -DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ - - -DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ - - -DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ - - -DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ - - -DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (68 ins) -extern s32 ratan2(s32 a0, s32 a1); - -s32 func_80148D44(void) { - - extern s32 D_801151D4; - extern u8 D_80126C01; - extern u16 D_80126C02; - extern u16 D_80126C06; - extern s32 D_8018BF44[]; - register s32 ang __asm__("$16"); - register s32 a __asm__("$4"); - s32 p; - s32 res; - s32 d; - - p = D_801151D4; - a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), - *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; - d = (s32)D_80126C01; - __asm__ __volatile__("" : : "r"(a)); - ang = a; - if (d == 0x53) { - goto final; - } - if (d < 0x54) { - if (d == 0x41) { - goto call; - } - return 0x41; - } - if (d != 0x73) { - return 0x73; - } - goto final; -call: - return (s32)(s16)((s16 (*)())(D_8018BF44[D_80126C02 >> 0xc]))(); -final: - { - u32 e = D_80126C06; - if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { - return -1; - } - __asm__ __volatile__("" : : : "memory"); - res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; - } - return res; -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80148E54); - -DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ - - -DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ - - -DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ - - -DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ - - -DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ - - -DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ - - -DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ - - -DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ - - -DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ - - -DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ - - -DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ - - -DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ - - -DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ - - -DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ - - -DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ - - -DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ - - -DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ - - -DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ - - -DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ - - -DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ - - -DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ - - -DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ - - -DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ - - -DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ - - -DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ - - -DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ - - -DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ - - -DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ - - -DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ - - -DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ - - -DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ - - -DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ - - -DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80149350); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80149374); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801493D0); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014942C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80149450); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801494CC); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80149544); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80149584); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801495C4); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014964C); - -DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ - - -DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ - - -DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ - - -DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ - - -DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801497A8); - -DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ - - -DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ - - -DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ - - -DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80149954); - -DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ - - -DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ - - -DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ - - -DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ - - -DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ - - -DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ - - -DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ - - -DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ - - -DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ - - -DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ - - -DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ - - -DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ - - -DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ - - -DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ - - -DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80149F2C); - -void func_80149FA8(void) { -} - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins) -extern s16 currentLocationId; - -s32 func_80149FB0(s32 a0) { - - extern s32 D_8018BFC4[]; - extern u8 D_80078E78[]; - s32 *p = &D_8018BFC4[0]; - register s32 v __asm__("$3") = *p; - u8 *q = &D_80078E78[0]; - s32 loc; - - if (v != 0) { - loc = currentLocationId; - p = p + 1; - do { - if (loc == v) { - goto ret0; - } - v = *p; - p = p + 1; - } while (v != 0); - } - - if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { - return 0; - } - if (*(s16 *)(a0 + 0x1C8) != 0) { - return 0; - } - if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { - ret0: - return 0; - } - v = q[0x48]; - q[0x48] = v ^ 0x80; - return 1; -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014A048); - -DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ - - -DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ - - -DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ - - -DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ - - -DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ - - -DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ - - -DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ - - -DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ - - -DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014A51C); - -DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ - - -DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ - - -DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ - - -DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ - - -DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ - - -DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ - - -DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ - - -DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014A738); - -DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ - - -DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ - - -DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ - - -DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ - - -DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ - - -DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ - - -DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ - - -DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ - - -DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ - - -DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ - - -DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ - - -DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ - - -DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ - - -DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ - -DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ - - -DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ - - -DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ - - -DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ - - -DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ - - -DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ - - -DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ - - -DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ - - -DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ - - -DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ - - -DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ - - -DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ - - -DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ - - -DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ - - -DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ - - -DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ - - -DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ - - -DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ - - -DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ - - -DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ - - -DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ - - -DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ - - -DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ - - -DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ - - -DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ - - -DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ - - -DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ - - -DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ - - -DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ - - -DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ - - -DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ - - -DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ - - -DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ - - -DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ - - -DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ - - -DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ - - -DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ - - -void func_8014BDE0(void) { -} - -DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ - - -DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ - - -DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ - - -DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ - - -DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ - - -DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ - - -DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ - - -DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ - - -DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ - - -DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ - - -DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ - - -DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ - - -DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ - - -DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ - - -DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ - - -DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ - - -DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ - - -DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014C1A0); - -DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ - - -DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ - - -DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ - - -DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ - - -DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ - - -DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ - - -DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014C4AC); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014C568); - -DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ - - - -extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); - -s16 func_8014C5D0(s32 a0, s32 a1) { - - extern u8 D_8018C054; - return func_8014C5FC(a0, a1, &D_8018C054); -} - - -DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ - - -DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ - - -DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ - - -DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ - - -DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014C6F4); - -DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ - - -DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ - - -DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ - - -DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ - - -DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ - - -DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ - - -DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ - - -DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ - - -DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ - - -DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ - - -DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ - - -DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ - - -DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ - - -DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ - - -DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ - - -DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ - - -DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ - - -DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ - - -DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ - - -DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ - - -DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ - - -DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ - - -DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ - - -DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014CBE8); - -DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ - - -DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ - - - -extern void func_8014CD0C(u8 *a0); - -void func_8014CCB4(void) -{ - - extern int D_801F4EF0; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014CD0C\n" - "lui $at, %%hi(D_801F4EF0)\n" - "sw $v0, %%lo(D_801F4EF0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801F4EF0)\n" - "lw $v0, %%lo(D_801F4EF0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014CD80); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014CF04); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D04C); - -DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D12C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D2A0); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D3E0); - -DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D4C0); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D610); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D738); - -DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014D820); - -DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ - - -DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014DF3C); - -DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ - - -DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ - - -DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014E434); - -DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ - - -DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014E5B4); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014E6A0); - -DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ - - -DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ - - -DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014E934); - -DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ - - -DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014ED28); - -DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ - - -DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014F1F4); - -DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ - - -DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014F3E8); - - -extern void func_8014F4C0(u8 *a0); - -void func_8014F468(void) -{ - - extern int D_801F4EF4; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F4C0\n" - "lui $at, %%hi(D_801F4EF4)\n" - "sw $v0, %%lo(D_801F4EF4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801F4EF4)\n" - "lw $v0, %%lo(D_801F4EF4)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014F4C0); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014F6F4); - -DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ - - - -// @class: other -// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801F4EF4; maspsx auto-fills jal delay slot) - -extern s32 func_8014FA70(s32 a0); - -void func_8014FA04(s32 a0) -{ - - extern s32 D_801F4EF4; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "sw $ra, 16($sp)\n" - "lw $v0, 68($a0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 1f\n" - "addu $v0, $zero, $zero\n" - "lui $a1, 0x1f80\n" - "ori $a1, $a1, 0x03fc\n" - "addu $t0, $a1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "lui $at, %%hi(D_801F4EF4)\n" - "sw $v0, %%lo(D_801F4EF4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801F4EF4)\n" - "lw $v0, %%lo(D_801F4EF4)($v0)\n" - "1:\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014FBC0); - -DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014FCFC); - -DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ - - -DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014FE60); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8014FFDC); - -DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ - - -DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801502EC); - -DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80150480); - -DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ - - -DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ - - -DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801506A4); - -DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ - - -DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ - - -DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ - - -DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ - - - -extern s32 func_80021174(s32 a0, s32 a1); - -s32 func_8015094C(s32 param_1) { - - extern S16 D_801F4500; - extern s32 D_8018C084; - extern s32 D_80126990; - extern s32 D_80126994; - extern u8 D_80126948[]; - struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ - S16 local; /* 0x10 @ 0x40 */ - s32 pad1[4]; /* 0x10 @ 0x50 */ - register u8 *cam __asm__("$17") = D_80126948; - s32 ret; - - local = D_801F4500; - arg.x = *(short *)(param_1 + 6); - arg.mid = D_80126994; - arg.y = *(short *)(param_1 + 0xe); - ret = func_80021174(D_8018C084, (s32)&arg); - if (ret == 0) { - { - short cur = *(short *)(param_1 + 6); - s32 diff = D_80126990 - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - { - short cur = *(short *)(param_1 + 0xe); - s32 diff = *(s32 *)(cam + 0x50) - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - (void)&pad1; - return 1; - } - return 0; -} - - - -extern s32 func_8014FA70(s32 a0); -extern void func_80015978(s32 a0, s32 *a1); - -void func_80150A70(s32 a0) -{ - - extern s32 D_801F4EF4; - __asm__ __volatile__( - ".set\tnoreorder\n" - "addiu $sp, $sp, -24\n" - "sw $s0, 16($sp)\n" - "addu $s0, $a0, $zero\n" - "sw $ra, 20($sp)\n" - "lh $v1, 6($s0)\n" - "lh $v0, 136($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 10($s0)\n" - "lh $v0, 138($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 14($s0)\n" - "lh $v0, 140($s0)\n" - "nop\n" - "beq $v1, $v0, 3f\n" - "nop\n" - "1:\n" - "lw $v0, 68($s0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 2f\n" - "addiu $a0, $s0, 4\n" - "lui $a2, 0x1f80\n" - "ori $a2, $a2, 0x03fc\n" - "addu $t0, $a2, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "addu $a0, $s0, $zero\n" - "lui $at, %%hi(D_801F4EF4)\n" - "sw $v0, %%lo(D_801F4EF4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "addiu $a0, $s0, 4\n" - "2:\n" - "jal func_80015978\n" - "addiu $a1, $s0, 136\n" - "3:\n" - "lw $ra, 20($sp)\n" - "lw $s0, 16($sp)\n" - "addiu $sp, $sp, 24\n" - ".set\treorder\n" - : : : "memory"); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) - - -void func_80150B28(int param_1) { - - extern s32 D_800AE6B0; - extern void (*D_8018C088[])(void); - u32 idx; - register u32 sub __asm__("$2"); - - if ((D_800AE6B0 & 0x80FFFFFF) == 0) { - idx = *(u16 *)(param_1 + 0x16C); - if (idx != 0 && idx < 0x26) { - sub = idx - 1; - D_8018C088[sub](); - } - } - *(u16 *)(param_1 + 0x16C) = 0; -} - - -void func_80150B9C(void) { -} - -DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ - - -DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ - - -DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ - - -DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ - - -DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ - - -DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ - - -DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ - - -DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ - - -DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ - - -DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ - - -DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ - - -DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ - - -DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ - - -DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ - - -DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ - - -DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ - - -DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ - - -DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ - - -DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ - - -DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ - - -DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ - - -void func_80150F78(void) { -} - -DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ - - -DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ - - -DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ - - -DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ - - -DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ - - -DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ - - -DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ - - -void func_801510B8(void) { -} - -void func_801510C0(void) { -} - -DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ - - -DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ - - -DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ - - -void func_80151130(void) { -} - -DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ - - -DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ - - -DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ - - -DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ - - -DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ - - -DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ - - -DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ - - -DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ - - -DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ - - -DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80151664); - -DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ - - -DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ - - -DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ - - -void func_80151878(void) { -} - -DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ - - -DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ - - -DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80151944); - -DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ - - -DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ - - -DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80151B98); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80151C54); - - - -void func_80151D24(void *a0) { - - extern void (*D_8018C12C[])(void); - D_8018C12C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ - - -DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ - - -DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ - - -DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ - - -DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ - - -DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ - - - - -void func_80152058(void *a0) { - - extern void (*D_8018C150[])(void); - D_8018C150[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); - -void func_801520DC(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_8018C140; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_801472C8(arg0); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_8018C140); - func_801477E8(arg0, 0x40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); - func_80147324(0x441); - func_80146CA0(arg0); -} - - -DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ - - -DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ - - -DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801470AC(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80153C18(); -void func_801522CC(s32 a0) { - s32 v1; - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - func_80154A74(a0, 0x11); - func_801553C0(a0); - func_801470AC((s32 *)a0); - func_801472B4((void *)a0); - v1 = *(s32 *)(a0 + 0x20); - *(s16 *)(a0 + 0x3E) = 0; - *(s16 *)(a0 + 0x40) = 0; - *(s16 *)(a0 + 0x42) = 0; - *(u8 *)(a0 + 0xDD) = 0; - *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; - *(s16 *)(v1 + 0x10) = 0; - *(u16 *)(a0 + 0x60) = 0x1000; - *(u16 *)(a0 + 0x62) = 0x1000; - *(u16 *)(a0 + 0x64) = 0x1000; - func_801477E8((s32 *)a0, 0); - func_80153C18(a0); -} - - - - -void func_80152370(void *a0) { - - extern void (*D_8018C164[])(void); - D_8018C164[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (67 ins) - -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80019064(void *a0); -extern int func_80151204(int arg, int a1); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - - -void func_801523F4(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern s32 D_800D58AC; - extern u8 D_8018C170[]; - s32 pad[4]; - s32 buf[4]; - register s32 s0a __asm__("$16"); /* $s0 = buf */ - register s32 s2a __asm__("$18") = (s32)&D_8018C170; /* $s2 = &D_8018C170 */ - - ((void (*)(s32, s32))func_80146E90)(arg0, 0); - func_80019064(&D_80062C04); - ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); - if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), - (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); - } else { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); - } - func_80154A74(arg0, 0x16); - ((void (*)(s32))func_80149020)(arg0); - s0a = (s32)buf; - ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, - s2a, s0a); - ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); - ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); - func_80147324(0x451); - ((void (*)(s32))func_80146CA0)(arg0); - (void)pad; -} - - -DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ - - -DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ - - - - -void func_80152698(void *a0) { - - extern void (*D_8018C180[])(void); - D_8018C180[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ - - -DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ - - -DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ - - - - -void func_8015282C(void *a0) { - - extern void (*D_8018C198[])(void); - D_8018C198[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_801528B0(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_8018C188; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_8018C188); - func_801477E8(arg0, 0xFFF00000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ - - -DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ - - -DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ - - -DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ - - - - -void func_80152B6C(void *a0) { - - extern void (*D_8018C1AC[])(void); - D_8018C1AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ - - -DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ - - -DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ - - -DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ - - - - -void func_80152D24(void *a0) { - - extern void (*D_8018C1C8[])(void); - D_8018C1C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_80152DA8(s32 arg0) -{ - - extern s32 D_80062C14; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_8018C1B8; - func_80019064(&D_80062C14); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - M2C_FIELD(arg0, s8 *, 0xDF) = 8; - func_80146DB8(arg0, &D_8018C1B8); - func_801477E8(arg0, 0xFFE40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ - - -DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ - - -DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ - - -DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ - - - - -void func_80153060(void *a0) { - - extern void (*D_8018C1DC[])(void); - D_8018C1DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ - - -DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ - - -DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ - - -DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ - - -DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ - - -DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ - - - - -void func_80153320(void *a0) { - - extern void (*D_8018C1F0[])(void); - D_8018C1F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ - - -DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ - - -DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ - - -DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ - - -DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ - - -DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ - - -extern void func_80146D90(s32 a0); -extern void func_8014CC28(s32 a0); -extern void func_8014ED28(s32 _arg0); -extern void func_8014FA04(s32 a0); - -s32 func_801535F4(void *arg0) { - s32 var_s1; - register u32 flags __asm__("$4"); - register u32 fcopy __asm__("$3"); - s32 ret; - - var_s1 = 0; - if (((s32 (*)(void))func_8014ED28)() != 0) { - func_80146D90((s32)arg0); - } - if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && - (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { - var_s1 = 1; - } - flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); - fcopy = flags; - if (flags & 0x4000) { - ret = 2; - } else if (flags & 0x2000) { - ret = 1; - } else { - ret = 4; - if ((fcopy & 0x8000) == 0) { - ret = var_s1; - } - } - __asm__ __volatile__("" : : "r"(flags)); - return ret; -} - - -DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ - - -DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ - - -DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ - - -DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ - - -DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ - - -DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ - - -DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ - - -DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ - - -DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ - - -DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ - - -DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ - - -DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ - - -DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ - - -DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ - - -DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls -extern void func_80019064(void *a0); - -void func_80153CCC(S80153CCC *a0) { - - extern s32 D_8018C204; - extern void (*D_8018C22C[])(void *a0); - extern s16 D_8011DB0C; - extern u16 D_8011F748; - ((s32 (*)(s32))func_80019064)((s32)&D_8018C204); - D_8018C22C[a0->idx](a0); - D_8011DB0C = 0; - D_8011F748 = 0; -} - - -DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (33/33) - -extern void func_80147324(s32 arg0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_80146CA0(void *a0); -extern s16 currentLocationId; - -void func_80153D7C(s32 param_1) -{ - - extern u8 D_8018C20C; - func_80147324(0x451); - func_80154274((s32 *)param_1, (s32)&D_8018C20C); - func_80149020((s32 *)param_1); - *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); - *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); - *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); - if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; - else *(u8 *)(param_1 + 0xde) = 10; - *(u8 *)(param_1 + 0xdf) = 0; - __asm__ __volatile__("" ::: "memory"); - func_80146CA0((void *)param_1); -} - - -DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ - - -DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ - - -DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ - - -DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ - - -DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ - - -DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ - - -DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ - - -DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ - - -DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ - - -DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ - - -DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ - - -DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ - - -DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801549F8); - -DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ - - -DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ - - -DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ - - -DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ - - -DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ - - -DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ - - -DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ - - -DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ - - -DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ diff --git a/src/ov_SC07_006/ov_SC07_006_jr_80140608.c b/src/ov_SC07_006/ov_SC07_006_jr_80140608.c new file mode 100644 index 000000000..2413722f0 --- /dev/null +++ b/src/ov_SC07_006/ov_SC07_006_jr_80140608.c @@ -0,0 +1,4661 @@ +#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 { s32 w[8]; } Vec8; +typedef struct { s32 m[3][3]; s32 t[3]; } MATRIX; +typedef struct { s32 vx, vy, vz; } VECTOR; +typedef struct { s16 h[8]; } Buf; +typedef struct { char _b[8]; } M8; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { s16 x, y, z; } Vec3s; +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_8014ED28(s32 _arg0); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern void func_80129010(void); +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern u8 D_80126948[]; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_80129CF8(void); +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern void func_8012A464(void); +extern s32 D_801151D4; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 D_80126B58; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern s32 func_8012E778(int param_1, int param_2); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_80130D0C(s32 a0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_80131E00(); +extern s32 D_801F4D80; +extern s32 D_801F4D84; +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_801345F8(s32 arg); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_801379FC(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 D_80127548[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s16 D_801269F4; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_8013CA14(void); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern void func_8013D9B0(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern void func_8013D330(void); +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_800190AC(void); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511A; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_8018B4A8[]; +extern u8 D_8018B4C0[]; +extern u16 D_8018B3C4[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + + extern u8 *D_8018B464; + extern u8 *D_8018B468; + extern u8 *D_8018B46C; + extern u8 *D_8018B470; + extern u8 *D_8018B474; + extern u16 *D_8018B478[]; + extern u16 *D_8018B480[]; + extern u16 *D_8018B4A0[]; + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8018B464; + iVar2 = func_80028D58(); + puVar3 = D_8018B478[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018B468; + iVar2 = func_80028DE0(); + puVar3 = D_8018B478[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8018B46C + 0x18) = *D_8018B480[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8018B470 + 0x18) = *D_8018B480[iVar2]; + + puVar1 = D_8018B474; + iVar2 = func_80028D9C(); + puVar3 = D_8018B4A0[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + + extern unsigned char D_80078E7F; + extern unsigned char D_80078E7E; + extern unsigned char D_80078E7D; + extern M2C_UNK D_8018B3A0; + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8018B3A0); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + + extern short D_80115128; + extern u8 D_8018B3B0; + extern char *D_8018B3D0; + extern char *D_8018B3D4; + extern char *D_8018B3D8; + extern char *D_8018B3DC; + extern char *D_8018B3E0; + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8018B3B0); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8018B3D0; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B3D4; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B3D8; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B3DC; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8018B3E0; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + + +// @class: other +// @stuck: none — MATCH + + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + + extern short D_80115128; + extern unsigned short D_80115172; + extern unsigned short D_8018B26A; + extern unsigned short D_8018B26E; + extern unsigned short D_8018B272; + extern unsigned short D_8018B276; + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8018B26A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B26E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B272; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8018B276; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ + + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ + + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ + + + + +void func_80141788(void) +{ + + extern unsigned short D_80115112; + extern void (*D_8018B800[])(void); + D_8018B800[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ + + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ + + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + + +void func_80141874(void) { + + extern u16 D_8011511E; + extern u16 D_8011511C; + extern unsigned short D_80115112; + extern u16 D_80115116; + extern void (*D_8018B80C[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8018B80C[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8018B424; + extern u8 D_8018B43C; + extern u8 D_8018B4B0; + extern u8 D_8018B4B8; + extern s16 D_8018B784; + extern s16 D_8018B786; + extern void *D_801F4EA0; + extern void *D_801F4EA4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801F4EA0 = &D_8018B424; + D_801F4EA4 = &D_8018B4B0; + } else { + D_801F4EA0 = &D_8018B43C; + D_801F4EA4 = &D_8018B4B8; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8018B784 = 0xE; + D_8018B786 = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018B788: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8018B788; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018B788); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80141B90); + +void func_80141C04(void) { +} + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + + extern u16 D_80115110; + extern u8 D_8018B760; + func_8002D4C8(*(u16 *)(&D_8018B760 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ + + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ + + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8018B830[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8018B830[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + + +void func_801425CC(void *a0) { + + extern void (*D_8018B840[])(void); + D_8018B840[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); + +void func_80142608(s32 param_1) +{ + + extern s32 D_8018B824; + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8018B824); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ + + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + + +void func_801427DC(void) { +} + +void func_801427E4(void) { +} + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801427EC(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8018B854[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8018B854[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80142838); + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_8014292C(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8018B870[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8018B870[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_80142978(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8018BA40[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8018BA40[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801429C4(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8018BAF8[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8018BAF8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + + +void func_80142A80(void) +{ + + extern u16 D_800B99D8; + extern struct packed_word D_801F44FC; + extern u8 D_801F4EA8; + extern u8 D_801F4EA9; + extern u8 D_801F4EAA; + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801F44FC; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801F4EA8 = mul * (local.b[0] >> 4); + D_801F4EA9 = mul * (local.b[1] >> 4); + D_801F4EAA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80142B2C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80142BB4); + +void func_80142C7C(void) { +} + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ + + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ + + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ + + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142DC4(int param_1) +{ + + extern int D_8018B848; + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018B848); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142E38(int param_1) +{ + + extern unsigned char D_8018B864[]; + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8018B864); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8018BA30[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8018BA30[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80142F68); + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_8014305C(int param_1) +{ + + extern unsigned char D_8018BA50[]; + extern unsigned char D_8018BAB0[]; + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8018BA50); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8018BAB0); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801430F4); + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + + +void func_801431E8(s32 param_1) { + + extern u8 D_801F44F8; + extern u8 D_801F4EA8; + extern u8 D_801F4EAC; + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801F44F8, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801F4EA8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801F4EA8, 0x10); + memcpy(&D_801F4EAC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ + + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801433F0); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + + extern u8 D_800D387C[]; + extern u32 D_8018BC08[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018BC08[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014350C); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_8014358C(s32 param_1) +{ + + extern u8 D_8018BC18[]; + extern u32 D_8018BD14[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_8018BC18; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018BD14[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ + + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ + + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ + + + + +void func_80143B30(void *a0) { + + extern void (*D_8018BD30[])(void); + D_8018BD30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ + + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ + + + + +void func_80143C38(void *a0) { + + extern void (*D_8018BD3C[])(void); + D_8018BD3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ + + + + +void func_80143C98(void *a0) { + + extern void (*D_8018BD44[])(void); + D_8018BD44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80143D28); + + + +void func_80143E68(void *a0) { + + extern void (*D_8018BD8C[])(void); + D_8018BD8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80143EA4(void) { +} + +void func_80143EAC(void) { +} + +void func_80143EB4(void) { +} + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ + + + + +void func_80144054(void *a0) { + + extern void (*D_8018BDA0[])(void); + D_8018BDA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + + +void func_801442F8(int param_1) +{ + + extern void (*D_8018BDA8[])(); + int iVar1; + + D_8018BDA8[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +void func_80144364(int param_1) { + + extern u8 D_8018BD24; + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8018BD24, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80144458); + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014462C); + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); + +void func_8014477C(void *param_1) { + + extern u8 D_8018BD4C; + extern u8 D_8018BD58; + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8018BD4C); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018BD58); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + + +void func_80144880(s32 param_1) +{ + + extern u8 D_8018BD24; + extern u8 D_8018BD94; + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8018BD24, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8018BD94, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + + + +void func_801449C8(void *a0) { + + extern void (*D_8018BDB0[])(void); + D_8018BDB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ + + + + +void func_80144A2C(void *a0) { + + extern void (*D_8018BDB8[])(void); + D_8018BDB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ + + +void func_80144A90(void) { +} + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ + + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80144B14); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80144B9C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801457A4); + +void func_801458E0(void) { +} + +DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_8018C944 block defeats the tail-merge of the two identical D_8018C944 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145934(void) { + + extern u8 D_8018C944; + extern u8 D_8018C8B4; + extern u8 D_8018C890; + extern u8 D_8018C86C; + extern u8 D_8018C920; + extern u8 D_8018C8FC; + extern u8 D_8018C8D8; + extern u8 D_8018C848; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_8018C944; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_8018C944 load from being + * tail-merged with the v>=0x384 D_8018C944 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_8018C8B4; + } else if (v >= 0x578) { + p = &D_8018C890; + } else if (v >= 0x514) { + p = &D_8018C86C; + } else if (v >= 0x384) { + p = &D_8018C944; + } else if (v >= 0x258) { + p = &D_8018C920; + } else if (v >= 0xC8) { + p = &D_8018C8FC; + } else if (v >= 0xA) { + p = &D_8018C8D8; + } else { + p = &D_8018C848; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_8018C9D4 block defeats the tail-merge of the two identical D_8018C9D4 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145A2C(void) { + + extern u8 D_8018C9D4; + extern u8 D_8018C8B4; + extern u8 D_8018C890; + extern u8 D_8018C86C; + extern u8 D_8018C9B0; + extern u8 D_8018C98C; + extern u8 D_8018C968; + extern u8 D_8018C848; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_8018C9D4; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_8018C9D4 load from being + * tail-merged with the v>=0x384 D_8018C9D4 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_8018C8B4; + } else if (v >= 0x578) { + p = &D_8018C890; + } else if (v >= 0x514) { + p = &D_8018C86C; + } else if (v >= 0x384) { + p = &D_8018C9D4; + } else if (v >= 0x258) { + p = &D_8018C9B0; + } else if (v >= 0xC8) { + p = &D_8018C98C; + } else if (v >= 0xA) { + p = &D_8018C968; + } else { + p = &D_8018C848; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + +DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ + + +DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ + + +DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80145CEC); + + + +// @class: schedule +// @stuck: branch layout — 3-way dispatch on param_1; trying switch form + +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); + + +void func_80145EE8(s32 param_1) +{ + + extern unsigned char D_8018BDCC[]; + extern unsigned char D_8018BDFC[]; + extern unsigned char D_8018BE4C[]; + extern unsigned char D_8018BE7C[]; + extern unsigned char D_8018BEAC[]; + switch (param_1) { + case 0: + if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { + ((void (*)(void *))func_80146014)(D_8018BDCC); + } + if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { + ((void (*)(void *))func_80146014)(D_8018BDFC); + } + if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { + ((void (*)(void *))func_80146014)(D_8018BE4C); + } + if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { + ((void (*)(void *))func_80146014)(D_8018BE7C); + } + if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { + return; + } + ((void (*)(void *))func_80146014)(D_8018BEAC); + break; + case 1: + ((void (*)(void *))func_80146014)(D_8018BDCC); + ((void (*)(void *))func_80146014)(D_8018BDFC); + ((void (*)(void *))func_80146014)(D_8018BE4C); + ((void (*)(void *))func_80146014)(D_8018BE7C); + ((void (*)(void *))func_80146014)(D_8018BEAC); + break; + } +} + + +DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ + + +void func_80146074(void) { +} + + +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); + +void func_8014607C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146128\n" + "lui $at, %%hi(D_801F4EE8)\n" + "sw $v0, %%lo(D_801F4EE8)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801F4EE8)\n" + "lw $v0, %%lo(D_801F4EE8)($v0)\n" + "nop\n" + "beqz $v0, .L80146114\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146360\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_801463A0\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + ".L80146114:\n" + "nop\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (fnptr-table idiom: D_8018BEFC[u8 idx](&arg)) + +void func_80146360(void) +{ + + extern void (*D_8018BEFC[])(void *); + extern u8 D_80126BA4; + extern s32 D_80126B58; + D_8018BEFC[D_80126BA4](&D_80126B58); +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801463A0); + +DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ + + +DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ + + +DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ + + +DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ + + +DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ + + +DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ + + +DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ + + +DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801466F0); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80146750); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014680C); + +DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ + + +DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ + + +DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ + + +DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80146A6C); + +DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80146AFC); + +DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ + + +DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ + + +DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ + + +DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ + + +DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ + + +DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ + + +DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ + + +DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ + + +DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ + + +DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ + + +DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ + + +DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ + + +DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ + + +DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ + + +DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80146F58); + +DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ + + +DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ + + +DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ + + +DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ + + +DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ + + +DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ + + +DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ + + +DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ + + +DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ + + +DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ + + +DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ + + +DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ + + +DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ + + +DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ + + +DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ + + +DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ + + +DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ + + +DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ + + +DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ + + +DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ + + +DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ + + +DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80147364); + +DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ + + +DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ + + +DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ + + +DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ + + +DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ + + +DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ + + +DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ + + +DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ + + +DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ + + +DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ + + +DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ + + +DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ + + +DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ + + +DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ + + +DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ + + +DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ + + +DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ + + +DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ + + +DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ + + +DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ + + +DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ + + +DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ + + +DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ + + +DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ + + +DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ + + +DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ + + +DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ + + +DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ + + +DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ + + +DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ + + +DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ + + +DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ + + +DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ + + +DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ + + +DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ + + +DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801483E8); + +DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ + + +DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ + + +DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ + + +DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ + + +DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ + + +DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ + + +DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ + + +DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ + + +DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ + + +DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ + + +DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ + + +DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ + + +DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ + + +DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ + + +DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ + + +DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ + + +DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ + + +DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg + +extern s32 ratan2(s32 a0, s32 a1); + +int func_80148AFC(void *a0) { + + extern s32 D_801151D4; + extern ActorFn D_8018BF04[]; + s32 p = (s32)a0; + s32 iVar5 = *(s32 *)(p + 0x20); + register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 sVar3; + u8 bVar1; + __asm__("" : "=r"(tmp) : "0"(tmp)); + sVar3 = tmp; + bVar1 = *(u8 *)(p + 0xA9); + + switch (bVar1) { + case 0x41: + return D_8018BF04[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; + case 0x53: + case 0x73: + { + register u32 bb __asm__("$3"); + register s32 c80 __asm__("$2") = 0x80; + register s32 lo __asm__("$4"); + register s32 hi __asm__("$2"); + bb = *(u16 *)(p + 0xAE); + lo = bb & 0xFF; + if (lo != c80 || (hi = bb >> 8) != 0x80) { + s32 sVar4; + __asm__ __volatile__("" : : : "memory"); + sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); + *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; + return 1; + } + return 0; + } + } +} + + +DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ + + +DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ + + +DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ + + +DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ + + +DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ + + +DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ + + +DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ + + +DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ + + +DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ + + +DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ + + +DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ + + +DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ + + +DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ + + +DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ + + +DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ + + +DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (68 ins) +extern s32 ratan2(s32 a0, s32 a1); + +s32 func_80148D44(void) { + + extern s32 D_801151D4; + extern u8 D_80126C01; + extern u16 D_80126C02; + extern u16 D_80126C06; + extern s32 D_8018BF44[]; + register s32 ang __asm__("$16"); + register s32 a __asm__("$4"); + s32 p; + s32 res; + s32 d; + + p = D_801151D4; + a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), + *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; + d = (s32)D_80126C01; + __asm__ __volatile__("" : : "r"(a)); + ang = a; + if (d == 0x53) { + goto final; + } + if (d < 0x54) { + if (d == 0x41) { + goto call; + } + return 0x41; + } + if (d != 0x73) { + return 0x73; + } + goto final; +call: + return (s32)(s16)((s16 (*)())(D_8018BF44[D_80126C02 >> 0xc]))(); +final: + { + u32 e = D_80126C06; + if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { + return -1; + } + __asm__ __volatile__("" : : : "memory"); + res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; + } + return res; +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80148E54); + +DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ + + +DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ + + +DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ + + +DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ + + +DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ + + +DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ + + +DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ + + +DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ + + +DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ + + +DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ + + +DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ + + +DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ + + +DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ + + +DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ + + +DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ + + +DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ + + +DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ + + +DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ + + +DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ + + +DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ + + +DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ + + +DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ + + +DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ + + +DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ + + +DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ + + +DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ + + +DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ + + +DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ + + +DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ + + +DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ + + +DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ + + +DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ + + +DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80149350); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80149374); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801493D0); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014942C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80149450); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801494CC); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80149544); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80149584); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801495C4); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014964C); + +DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ + + +DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ + + +DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ + + +DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ + + +DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801497A8); + +DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ + + +DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ + + +DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ + + +DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80149954); + +DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ + + +DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ + + +DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ + + +DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ + + +DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ + + +DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ + + +DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ + + +DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ + + +DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ + + +DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ + + +DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ + + +DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ + + +DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ + + +DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ + + +DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80149F2C); + +void func_80149FA8(void) { +} + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins) +extern s16 currentLocationId; + +s32 func_80149FB0(s32 a0) { + + extern s32 D_8018BFC4[]; + extern u8 D_80078E78[]; + s32 *p = &D_8018BFC4[0]; + register s32 v __asm__("$3") = *p; + u8 *q = &D_80078E78[0]; + s32 loc; + + if (v != 0) { + loc = currentLocationId; + p = p + 1; + do { + if (loc == v) { + goto ret0; + } + v = *p; + p = p + 1; + } while (v != 0); + } + + if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { + return 0; + } + if (*(s16 *)(a0 + 0x1C8) != 0) { + return 0; + } + if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { + ret0: + return 0; + } + v = q[0x48]; + q[0x48] = v ^ 0x80; + return 1; +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014A048); + +DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ + + +DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ + + +DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ + + +DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ + + +DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ + + +DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ + + +DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ + + +DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ + + +DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014A51C); + +DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ + + +DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ + + +DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ + + +DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ + + +DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ + + +DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ + + +DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ + + +DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014A738); + +DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ + + +DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ + + +DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ + + +DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ + + +DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ + + +DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ + + +DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ + + +DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ + + +DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ + + +DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ + + +DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ + + +DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ + + +DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ + + +DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ + +DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ + + +DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ + + +DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ + + +DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ + + +DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ + + +DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ + + +DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ + + +DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ + + +DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ + + +DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ + + +DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ + + +DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ + + +DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ + + +DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ + + +DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ + + +DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ + + +DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ + + +DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ + + +DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ + + +DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ + + +DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ + + +DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ + + +DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ + + +DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ + + +DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ + + +DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ + + +DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ + + +DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ + + +DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ + + +DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ + + +DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ + + +DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ + + +DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ + + +DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ + + +DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ + + +DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ + + +DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ + + +void func_8014BDE0(void) { +} + +DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ + + +DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ + + +DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ + + +DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ + + +DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ + + +DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ + + +DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ + + +DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ + + +DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ + + +DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ + + +DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ + + +DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ + + +DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ + + +DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ + + +DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ + + +DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ + + +DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ + + +DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014C1A0); + +DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ + + +DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ + + +DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ + + +DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ + + +DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ + + +DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ + + +DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014C4AC); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014C568); + +DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ + + + +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); + +s16 func_8014C5D0(s32 a0, s32 a1) { + + extern u8 D_8018C054; + return func_8014C5FC(a0, a1, &D_8018C054); +} + + +DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ + + +DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ + + +DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ + + +DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ + + +DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014C6F4); + +DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ + + +DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ + + +DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ + + +DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ + + +DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ + + +DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ + + +DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ + + +DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ + + +DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ + + +DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ + + +DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ + + +DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ + + +DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ + + +DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ + + +DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ + + +DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ + + +DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ + + +DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ + + +DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ + + +DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ + + +DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ + + +DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ + + +DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ + + +DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014CBE8); + +DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ + + +DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ + + + +extern void func_8014CD0C(u8 *a0); + +void func_8014CCB4(void) +{ + + extern int D_801F4EF0; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014CD0C\n" + "lui $at, %%hi(D_801F4EF0)\n" + "sw $v0, %%lo(D_801F4EF0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801F4EF0)\n" + "lw $v0, %%lo(D_801F4EF0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014CD80); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014CF04); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D04C); + +DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D12C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D2A0); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D3E0); + +DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D4C0); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D610); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D738); + +DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014D820); + +DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ + + +DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014DF3C); + +DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ + + +DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ + + +DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014E434); + +DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ + + +DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014E5B4); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014E6A0); + +DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ + + +DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ + + +DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014E934); + +DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ + + +DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014ED28); + +DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ + + +DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014F1F4); + +DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ + + +DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014F3E8); + + +extern void func_8014F4C0(u8 *a0); + +void func_8014F468(void) +{ + + extern int D_801F4EF4; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F4C0\n" + "lui $at, %%hi(D_801F4EF4)\n" + "sw $v0, %%lo(D_801F4EF4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801F4EF4)\n" + "lw $v0, %%lo(D_801F4EF4)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014F4C0); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014F6F4); + +DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ + + + +// @class: other +// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801F4EF4; maspsx auto-fills jal delay slot) + +extern s32 func_8014FA70(s32 a0); + +void func_8014FA04(s32 a0) +{ + + extern s32 D_801F4EF4; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "sw $ra, 16($sp)\n" + "lw $v0, 68($a0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 1f\n" + "addu $v0, $zero, $zero\n" + "lui $a1, 0x1f80\n" + "ori $a1, $a1, 0x03fc\n" + "addu $t0, $a1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "lui $at, %%hi(D_801F4EF4)\n" + "sw $v0, %%lo(D_801F4EF4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801F4EF4)\n" + "lw $v0, %%lo(D_801F4EF4)($v0)\n" + "1:\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014FBC0); + +DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014FCFC); + +DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ + + +DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014FE60); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014FFDC); + +DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ + + +DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801502EC); + +DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80150480); + +DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ + + +DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ + + +DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801506A4); + +DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ + + +DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ + + +DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ + + +DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ + + + +extern s32 func_80021174(s32 a0, s32 a1); + +s32 func_8015094C(s32 param_1) { + + extern S16 D_801F4500; + extern s32 D_8018C084; + extern s32 D_80126990; + extern s32 D_80126994; + extern u8 D_80126948[]; + struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ + S16 local; /* 0x10 @ 0x40 */ + s32 pad1[4]; /* 0x10 @ 0x50 */ + register u8 *cam __asm__("$17") = D_80126948; + s32 ret; + + local = D_801F4500; + arg.x = *(short *)(param_1 + 6); + arg.mid = D_80126994; + arg.y = *(short *)(param_1 + 0xe); + ret = func_80021174(D_8018C084, (s32)&arg); + if (ret == 0) { + { + short cur = *(short *)(param_1 + 6); + s32 diff = D_80126990 - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + { + short cur = *(short *)(param_1 + 0xe); + s32 diff = *(s32 *)(cam + 0x50) - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + (void)&pad1; + return 1; + } + return 0; +} + + + +extern s32 func_8014FA70(s32 a0); +extern void func_80015978(s32 a0, s32 *a1); + +void func_80150A70(s32 a0) +{ + + extern s32 D_801F4EF4; + __asm__ __volatile__( + ".set\tnoreorder\n" + "addiu $sp, $sp, -24\n" + "sw $s0, 16($sp)\n" + "addu $s0, $a0, $zero\n" + "sw $ra, 20($sp)\n" + "lh $v1, 6($s0)\n" + "lh $v0, 136($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 10($s0)\n" + "lh $v0, 138($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 14($s0)\n" + "lh $v0, 140($s0)\n" + "nop\n" + "beq $v1, $v0, 3f\n" + "nop\n" + "1:\n" + "lw $v0, 68($s0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 2f\n" + "addiu $a0, $s0, 4\n" + "lui $a2, 0x1f80\n" + "ori $a2, $a2, 0x03fc\n" + "addu $t0, $a2, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "addu $a0, $s0, $zero\n" + "lui $at, %%hi(D_801F4EF4)\n" + "sw $v0, %%lo(D_801F4EF4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "addiu $a0, $s0, 4\n" + "2:\n" + "jal func_80015978\n" + "addiu $a1, $s0, 136\n" + "3:\n" + "lw $ra, 20($sp)\n" + "lw $s0, 16($sp)\n" + "addiu $sp, $sp, 24\n" + ".set\treorder\n" + : : : "memory"); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) + + +void func_80150B28(int param_1) { + + extern s32 D_800AE6B0; + extern void (*D_8018C088[])(void); + u32 idx; + register u32 sub __asm__("$2"); + + if ((D_800AE6B0 & 0x80FFFFFF) == 0) { + idx = *(u16 *)(param_1 + 0x16C); + if (idx != 0 && idx < 0x26) { + sub = idx - 1; + D_8018C088[sub](); + } + } + *(u16 *)(param_1 + 0x16C) = 0; +} + + +void func_80150B9C(void) { +} + +DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ + + +DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ + + +DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ + + +DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ + + +DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ + + +DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ + + +DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ + + +DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ + + +DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ + + +DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ + + +DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ + + +DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ + + +DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ + + +DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ + + +DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ + + +DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ + + +DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ + + +DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ + + +DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ + + +DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ + + +DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ + + +void func_80150F78(void) { +} + +DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ + + +DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ + + +DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ + + +DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ + + +DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ + + +DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ + + +DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ + + +void func_801510B8(void) { +} + +void func_801510C0(void) { +} + +DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ + + +DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ + + +DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ + + +void func_80151130(void) { +} + +DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ + + +DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ + + +DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ + + +DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ + + +DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ + + +DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ + + +DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ + + +DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ + + +DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ + + +DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80151664); + +DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ + + +DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ + + +DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ + + +void func_80151878(void) { +} + +DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ + + +DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ + + +DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80151944); + +DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ + + +DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ + + +DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80151B98); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80151C54); + + + +void func_80151D24(void *a0) { + + extern void (*D_8018C12C[])(void); + D_8018C12C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ + + +DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ + + +DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ + + +DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ + + +DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ + + +DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ + + + + +void func_80152058(void *a0) { + + extern void (*D_8018C150[])(void); + D_8018C150[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); + +void func_801520DC(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_8018C140; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_801472C8(arg0); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_8018C140); + func_801477E8(arg0, 0x40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); + func_80147324(0x441); + func_80146CA0(arg0); +} + + +DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ + + +DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ + + +DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801470AC(s32 *a0); +extern void func_801472B4(void *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80153C18(); +void func_801522CC(s32 a0) { + s32 v1; + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + func_80154A74(a0, 0x11); + func_801553C0(a0); + func_801470AC((s32 *)a0); + func_801472B4((void *)a0); + v1 = *(s32 *)(a0 + 0x20); + *(s16 *)(a0 + 0x3E) = 0; + *(s16 *)(a0 + 0x40) = 0; + *(s16 *)(a0 + 0x42) = 0; + *(u8 *)(a0 + 0xDD) = 0; + *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; + *(s16 *)(v1 + 0x10) = 0; + *(u16 *)(a0 + 0x60) = 0x1000; + *(u16 *)(a0 + 0x62) = 0x1000; + *(u16 *)(a0 + 0x64) = 0x1000; + func_801477E8((s32 *)a0, 0); + func_80153C18(a0); +} + + + + +void func_80152370(void *a0) { + + extern void (*D_8018C164[])(void); + D_8018C164[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (67 ins) + +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80019064(void *a0); +extern int func_80151204(int arg, int a1); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + + +void func_801523F4(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern s32 D_800D58AC; + extern u8 D_8018C170[]; + s32 pad[4]; + s32 buf[4]; + register s32 s0a __asm__("$16"); /* $s0 = buf */ + register s32 s2a __asm__("$18") = (s32)&D_8018C170; /* $s2 = &D_8018C170 */ + + ((void (*)(s32, s32))func_80146E90)(arg0, 0); + func_80019064(&D_80062C04); + ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); + if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), + (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); + } else { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); + } + func_80154A74(arg0, 0x16); + ((void (*)(s32))func_80149020)(arg0); + s0a = (s32)buf; + ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, + s2a, s0a); + ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); + ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); + func_80147324(0x451); + ((void (*)(s32))func_80146CA0)(arg0); + (void)pad; +} + + +DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ + + +DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ + + + + +void func_80152698(void *a0) { + + extern void (*D_8018C180[])(void); + D_8018C180[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ + + +DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ + + +DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ + + + + +void func_8015282C(void *a0) { + + extern void (*D_8018C198[])(void); + D_8018C198[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_801528B0(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_8018C188; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_8018C188); + func_801477E8(arg0, 0xFFF00000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ + + +DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ + + +DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ + + +DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ + + + + +void func_80152B6C(void *a0) { + + extern void (*D_8018C1AC[])(void); + D_8018C1AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ + + +DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ + + +DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ + + +DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ + + + + +void func_80152D24(void *a0) { + + extern void (*D_8018C1C8[])(void); + D_8018C1C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_80152DA8(s32 arg0) +{ + + extern s32 D_80062C14; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_8018C1B8; + func_80019064(&D_80062C14); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + M2C_FIELD(arg0, s8 *, 0xDF) = 8; + func_80146DB8(arg0, &D_8018C1B8); + func_801477E8(arg0, 0xFFE40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ + + +DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ + + +DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ + + +DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ + + + + +void func_80153060(void *a0) { + + extern void (*D_8018C1DC[])(void); + D_8018C1DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ + + +DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ + + +DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ + + +DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ + + +DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ + + +DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ + + + + +void func_80153320(void *a0) { + + extern void (*D_8018C1F0[])(void); + D_8018C1F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ + + +DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ + + +DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ + + +DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ + + +DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ + + +DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ + + +extern void func_80146D90(s32 a0); +extern void func_8014CC28(s32 a0); +extern void func_8014ED28(s32 _arg0); +extern void func_8014FA04(s32 a0); + +s32 func_801535F4(void *arg0) { + s32 var_s1; + register u32 flags __asm__("$4"); + register u32 fcopy __asm__("$3"); + s32 ret; + + var_s1 = 0; + if (((s32 (*)(void))func_8014ED28)() != 0) { + func_80146D90((s32)arg0); + } + if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && + (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { + var_s1 = 1; + } + flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); + fcopy = flags; + if (flags & 0x4000) { + ret = 2; + } else if (flags & 0x2000) { + ret = 1; + } else { + ret = 4; + if ((fcopy & 0x8000) == 0) { + ret = var_s1; + } + } + __asm__ __volatile__("" : : "r"(flags)); + return ret; +} + + +DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ + + +DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ + + +DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ + + +DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ + + +DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ + + +DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ + + +DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ + + +DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ + + +DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ + + +DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ + + +DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ + + +DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ + + +DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ + + +DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ + + +DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls +extern void func_80019064(void *a0); + +void func_80153CCC(S80153CCC *a0) { + + extern s32 D_8018C204; + extern void (*D_8018C22C[])(void *a0); + extern s16 D_8011DB0C; + extern u16 D_8011F748; + ((s32 (*)(s32))func_80019064)((s32)&D_8018C204); + D_8018C22C[a0->idx](a0); + D_8011DB0C = 0; + D_8011F748 = 0; +} + + +DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (33/33) + +extern void func_80147324(s32 arg0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_80146CA0(void *a0); +extern s16 currentLocationId; + +void func_80153D7C(s32 param_1) +{ + + extern u8 D_8018C20C; + func_80147324(0x451); + func_80154274((s32 *)param_1, (s32)&D_8018C20C); + func_80149020((s32 *)param_1); + *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); + *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); + *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); + if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; + else *(u8 *)(param_1 + 0xde) = 10; + *(u8 *)(param_1 + 0xdf) = 0; + __asm__ __volatile__("" ::: "memory"); + func_80146CA0((void *)param_1); +} + + +DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ + + +DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ + + +DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ + + +DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ + + +DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ + + +DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ + + +DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ + + +DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ + + +DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ + + +DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ + + +DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ + + +DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ + + +DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8015444C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_801549F8); + +DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ + + +DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ + + +DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ + + +DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ + + +DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ + + +DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ + + +DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ + + +DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ + + +DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ + diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c b/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c index c4c123a97..b6888c8b7 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c @@ -1217,3762 +1217,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - - extern u8 *D_80183F88; - extern u8 *D_80183F8C; - extern u8 *D_80183F90; - extern u8 *D_80183F94; - extern u8 *D_80183F98; - extern u16 *D_80183F9C[]; - extern u16 *D_80183FA4[]; - extern u16 *D_80183FC4[]; - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183F88; - iVar2 = func_80028D58(); - puVar3 = D_80183F9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_80183F8C; - iVar2 = func_80028DE0(); - puVar3 = D_80183F9C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80183F90 + 0x18) = *D_80183FA4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80183F94 + 0x18) = *D_80183FA4[iVar2]; - - puVar1 = D_80183F98; - iVar2 = func_80028D9C(); - puVar3 = D_80183FC4[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - - extern unsigned char D_80078E7F; - extern unsigned char D_80078E7E; - extern unsigned char D_80078E7D; - extern M2C_UNK D_80183EC4; - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80183EC4); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - - extern short D_80115128; - extern u8 D_80183ED4; - extern char *D_80183EF4; - extern char *D_80183EF8; - extern char *D_80183EFC; - extern char *D_80183F00; - extern char *D_80183F04; - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80183ED4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80183EF4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183EF8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183EFC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183F00; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80183F04; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - - -// @class: other -// @stuck: none — MATCH - - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - - extern short D_80115128; - extern unsigned short D_80115172; - extern unsigned short D_80183D8E; - extern unsigned short D_80183D92; - extern unsigned short D_80183D96; - extern unsigned short D_80183D9A; - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80183D8E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80183D92; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80183D96; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80183D9A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ - - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ - - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ - - - - -void func_80141788(void) -{ - - extern unsigned short D_80115112; - extern void (*D_80184324[])(void); - D_80184324[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ - - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ - - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - - -void func_80141874(void) { - - extern u16 D_8011511E; - extern u16 D_8011511C; - extern unsigned short D_80115112; - extern u16 D_80115116; - extern void (*D_80184330[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_80184330[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80183F48; - extern u8 D_80183F60; - extern u8 D_80183FD4; - extern u8 D_80183FDC; - extern s16 D_801842A8; - extern s16 D_801842AA; - extern void *D_801C6608; - extern void *D_801C660C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801C6608 = &D_80183F48; - D_801C660C = &D_80183FD4; - } else { - D_801C6608 = &D_80183F60; - D_801C660C = &D_80183FDC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_801842A8 = 0xE; - D_801842AA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_801842AC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_801842AC; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_801842AC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80141B90); - -void func_80141C04(void) { -} - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - - extern u16 D_80115110; - extern u8 D_80184284; - func_8002D4C8(*(u16 *)(&D_80184284 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ - - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ - - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_80184354[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_80184354[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - - -void func_801425CC(void *a0) { - - extern void (*D_80184364[])(void); - D_80184364[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); - -void func_80142608(s32 param_1) -{ - - extern s32 D_80184348; - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_80184348); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ - - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - - -void func_801427DC(void) { -} - -void func_801427E4(void) { -} - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801427EC(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_80184378[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_80184378[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80142838); - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_8014292C(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_80184394[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_80184394[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_80142978(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_80184564[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_80184564[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801429C4(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8018461C[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8018461C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - - -void func_80142A80(void) -{ - - extern u16 D_800B99D8; - extern struct packed_word D_801C5CD8; - extern u8 D_801C6610; - extern u8 D_801C6611; - extern u8 D_801C6612; - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801C5CD8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801C6610 = mul * (local.b[0] >> 4); - D_801C6611 = mul * (local.b[1] >> 4); - D_801C6612 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80142B2C); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80142BB4); - -void func_80142C7C(void) { -} - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ - - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ - - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ - - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142DC4(int param_1) -{ - - extern int D_8018436C; - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018436C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142E38(int param_1) -{ - - extern unsigned char D_80184388[]; - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184388); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_80184554[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_80184554[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80142F68); - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_8014305C(int param_1) -{ - - extern unsigned char D_80184574[]; - extern unsigned char D_801845D4[]; - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184574); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_801845D4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801430F4); - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - - -void func_801431E8(s32 param_1) { - - extern u8 D_801C5CD4; - extern u8 D_801C6610; - extern u8 D_801C6614; - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801C5CD4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801C6610); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801C6610, 0x10); - memcpy(&D_801C6614, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ - - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801433F0); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - - extern u8 D_800D387C[]; - extern u32 D_8018472C[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8018472C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014350C); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_8014358C(s32 param_1) -{ - - extern u8 D_8018473C[]; - extern u32 D_80184838[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_8018473C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_80184838[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ - - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ - - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ - - - - -void func_80143B30(void *a0) { - - extern void (*D_80184854[])(void); - D_80184854[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ - - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ - - - - -void func_80143C38(void *a0) { - - extern void (*D_80184860[])(void); - D_80184860[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ - - - - -void func_80143C98(void *a0) { - - extern void (*D_80184868[])(void); - D_80184868[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80143D28); - - - -void func_80143E68(void *a0) { - - extern void (*D_801848B0[])(void); - D_801848B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80143EA4(void) { -} - -void func_80143EAC(void) { -} - -void func_80143EB4(void) { -} - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ - - - - -void func_80144054(void *a0) { - - extern void (*D_801848C4[])(void); - D_801848C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - - -void func_801442F8(int param_1) -{ - - extern void (*D_801848CC[])(); - int iVar1; - - D_801848CC[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -void func_80144364(int param_1) { - - extern u8 D_80184848; - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_80184848, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80144458); - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014462C); - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); - -void func_8014477C(void *param_1) { - - extern u8 D_80184870; - extern u8 D_8018487C; - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184870); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018487C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - - -void func_80144880(s32 param_1) -{ - - extern u8 D_80184848; - extern u8 D_801848B8; - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_80184848, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_801848B8, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - - - -void func_801449C8(void *a0) { - - extern void (*D_801848D4[])(void); - D_801848D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ - - - - -void func_80144A2C(void *a0) { - - extern void (*D_801848DC[])(void); - D_801848DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ - - -void func_80144A90(void) { -} - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ - - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80144B14); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80144B9C); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801457A4); - -void func_801458E0(void) { -} - -DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80185468 block defeats the tail-merge of the two identical D_80185468 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145934(void) { - - extern u8 D_80185468; - extern u8 D_801853D8; - extern u8 D_801853B4; - extern u8 D_80185390; - extern u8 D_80185444; - extern u8 D_80185420; - extern u8 D_801853FC; - extern u8 D_8018536C; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_80185468; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80185468 load from being - * tail-merged with the v>=0x384 D_80185468 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_801853D8; - } else if (v >= 0x578) { - p = &D_801853B4; - } else if (v >= 0x514) { - p = &D_80185390; - } else if (v >= 0x384) { - p = &D_80185468; - } else if (v >= 0x258) { - p = &D_80185444; - } else if (v >= 0xC8) { - p = &D_80185420; - } else if (v >= 0xA) { - p = &D_801853FC; - } else { - p = &D_8018536C; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801854F8 block defeats the tail-merge of the two identical D_801854F8 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145A2C(void) { - - extern u8 D_801854F8; - extern u8 D_801853D8; - extern u8 D_801853B4; - extern u8 D_80185390; - extern u8 D_801854D4; - extern u8 D_801854B0; - extern u8 D_8018548C; - extern u8 D_8018536C; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_801854F8; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801854F8 load from being - * tail-merged with the v>=0x384 D_801854F8 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_801853D8; - } else if (v >= 0x578) { - p = &D_801853B4; - } else if (v >= 0x514) { - p = &D_80185390; - } else if (v >= 0x384) { - p = &D_801854F8; - } else if (v >= 0x258) { - p = &D_801854D4; - } else if (v >= 0xC8) { - p = &D_801854B0; - } else if (v >= 0xA) { - p = &D_8018548C; - } else { - p = &D_8018536C; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - -DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ - - -DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ - - -DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80145CEC); - - - -// @class: schedule -// @stuck: branch layout — 3-way dispatch on param_1; trying switch form - -extern s32 func_80029178(s32 arg); -extern void func_80146014(s32 a0); - - -void func_80145EE8(s32 param_1) -{ - - extern unsigned char D_801848F0[]; - extern unsigned char D_80184920[]; - extern unsigned char D_80184970[]; - extern unsigned char D_801849A0[]; - extern unsigned char D_801849D0[]; - switch (param_1) { - case 0: - if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { - ((void (*)(void *))func_80146014)(D_801848F0); - } - if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { - ((void (*)(void *))func_80146014)(D_80184920); - } - if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { - ((void (*)(void *))func_80146014)(D_80184970); - } - if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { - ((void (*)(void *))func_80146014)(D_801849A0); - } - if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { - return; - } - ((void (*)(void *))func_80146014)(D_801849D0); - break; - case 1: - ((void (*)(void *))func_80146014)(D_801848F0); - ((void (*)(void *))func_80146014)(D_80184920); - ((void (*)(void *))func_80146014)(D_80184970); - ((void (*)(void *))func_80146014)(D_801849A0); - ((void (*)(void *))func_80146014)(D_801849D0); - break; - } -} - - -DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ - - -void func_80146074(void) { -} - - -extern s32 func_80146128(void); -extern void func_80146360(void); -extern void func_801463A0(void); - -void func_8014607C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146128\n" - "lui $at, %%hi(D_801C6650)\n" - "sw $v0, %%lo(D_801C6650)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C6650)\n" - "lw $v0, %%lo(D_801C6650)($v0)\n" - "nop\n" - "beqz $v0, .L80146114\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146360\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_801463A0\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - ".L80146114:\n" - "nop\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (fnptr-table idiom: D_80184A20[u8 idx](&arg)) - -void func_80146360(void) -{ - - extern void (*D_80184A20[])(void *); - extern u8 D_80126BA4; - extern s32 D_80126B58; - D_80184A20[D_80126BA4](&D_80126B58); -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801463A0); - -DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ - - -DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ - - -DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ - - -DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ - - -DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ - - -DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ - - -DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ - - -DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801466F0); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80146750); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014680C); - -DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ - - -DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ - - -DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ - - -DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80146A6C); - -DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80146AFC); - -DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ - - -DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ - - -DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ - - -DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ - - -DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ - - -DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ - - -DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ - - -DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ - - -DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ - - -DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ - - -DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ - - -DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ - - -DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ - - -DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ - - -DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80146F58); - -DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ - - -DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ - - -DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ - - -DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ - - -DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ - - -DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ - - -DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ - - -DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ - - -DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ - - -DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ - - -DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ - - -DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ - - -DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ - - -DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ - - -DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ - - -DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ - - -DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ - - -DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ - - -DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ - - -DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ - - -DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ - - -DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80147364); - -DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ - - -DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ - - -DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ - - -DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ - - -DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ - - -DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ - - -DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ - - -DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ - - -DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ - - -DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ - - -DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ - - -DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ - - -DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ - - -DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ - - -DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ - - -DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ - - -DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ - - -DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ - - -DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ - - -DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ - - -DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ - - -DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ - - -DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ - - -DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ - - -DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ - - -DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ - - -DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ - - -DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ - - -DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ - - -DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ - - -DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ - - -DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ - - -DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ - - -DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ - - -DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ - - -DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801483E8); - -DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ - - -DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ - - -DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ - - -DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ - - -DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ - - -DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ - - -DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ - - -DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ - - -DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ - - -DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ - - -DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ - - -DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ - - -DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ - - -DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ - - -DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ - - -DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ - - -DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ - - -DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg - -extern s32 ratan2(s32 a0, s32 a1); - -int func_80148AFC(void *a0) { - - extern s32 D_801151D4; - extern ActorFn D_80184A28[]; - s32 p = (s32)a0; - s32 iVar5 = *(s32 *)(p + 0x20); - register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 sVar3; - u8 bVar1; - __asm__("" : "=r"(tmp) : "0"(tmp)); - sVar3 = tmp; - bVar1 = *(u8 *)(p + 0xA9); - - switch (bVar1) { - case 0x41: - return D_80184A28[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; - case 0x53: - case 0x73: - { - register u32 bb __asm__("$3"); - register s32 c80 __asm__("$2") = 0x80; - register s32 lo __asm__("$4"); - register s32 hi __asm__("$2"); - bb = *(u16 *)(p + 0xAE); - lo = bb & 0xFF; - if (lo != c80 || (hi = bb >> 8) != 0x80) { - s32 sVar4; - __asm__ __volatile__("" : : : "memory"); - sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); - *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; - return 1; - } - return 0; - } - } -} - - -DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ - - -DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ - - -DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ - - -DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ - - -DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ - - -DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ - - -DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ - - -DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ - - -DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ - - -DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ - - -DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ - - -DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ - - -DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ - - -DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ - - -DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ - - -DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (68 ins) -extern s32 ratan2(s32 a0, s32 a1); - -s32 func_80148D44(void) { - - extern s32 D_801151D4; - extern u8 D_80126C01; - extern u16 D_80126C02; - extern u16 D_80126C06; - extern s32 D_80184A68[]; - register s32 ang __asm__("$16"); - register s32 a __asm__("$4"); - s32 p; - s32 res; - s32 d; - - p = D_801151D4; - a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), - *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; - d = (s32)D_80126C01; - __asm__ __volatile__("" : : "r"(a)); - ang = a; - if (d == 0x53) { - goto final; - } - if (d < 0x54) { - if (d == 0x41) { - goto call; - } - return 0x41; - } - if (d != 0x73) { - return 0x73; - } - goto final; -call: - return (s32)(s16)((s16 (*)())(D_80184A68[D_80126C02 >> 0xc]))(); -final: - { - u32 e = D_80126C06; - if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { - return -1; - } - __asm__ __volatile__("" : : : "memory"); - res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; - } - return res; -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80148E54); - -DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ - - -DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ - - -DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ - - -DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ - - -DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ - - -DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ - - -DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ - - -DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ - - -DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ - - -DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ - - -DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ - - -DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ - - -DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ - - -DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ - - -DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ - - -DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ - - -DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ - - -DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ - - -DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ - - -DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ - - -DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ - - -DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ - - -DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ - - -DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ - - -DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ - - -DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ - - -DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ - - -DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ - - -DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ - - -DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ - - -DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ - - -DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ - - -DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80149350); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80149374); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801493D0); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014942C); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80149450); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801494CC); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80149544); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80149584); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801495C4); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014964C); - -DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ - - -DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ - - -DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ - - -DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ - - -DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801497A8); - -DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ - - -DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ - - -DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ - - -DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80149954); - -DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ - - -DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ - - -DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ - - -DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ - - -DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ - - -DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ - - -DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ - - -DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ - - -DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ - - -DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ - - -DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ - - -DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ - - -DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ - - -DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ - - -DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80149F2C); - -void func_80149FA8(void) { -} - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins) -extern s16 currentLocationId; - -s32 func_80149FB0(s32 a0) { - - extern s32 D_80184AE8[]; - extern u8 D_80078E78[]; - s32 *p = &D_80184AE8[0]; - register s32 v __asm__("$3") = *p; - u8 *q = &D_80078E78[0]; - s32 loc; - - if (v != 0) { - loc = currentLocationId; - p = p + 1; - do { - if (loc == v) { - goto ret0; - } - v = *p; - p = p + 1; - } while (v != 0); - } - - if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { - return 0; - } - if (*(s16 *)(a0 + 0x1C8) != 0) { - return 0; - } - if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { - ret0: - return 0; - } - v = q[0x48]; - q[0x48] = v ^ 0x80; - return 1; -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014A048); - -DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ - - -DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ - - -DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ - - -DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ - - -DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ - - -DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ - - -DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ - - -DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ - - -DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014A51C); - -DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ - - -DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ - - -DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ - - -DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ - - -DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ - - -DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ - - -DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ - - -DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014A738); - -DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ - - -DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ - - -DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ - - -DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ - - -DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ - - -DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ - - -DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ - - -DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ - - -DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ - - -DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ - - -DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ - - -DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ - - -DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ - - -DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ - -DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ - - -DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ - - -DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ - - -DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ - - -DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ - - -DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ - - -DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ - - -DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ - - -DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ - - -DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ - - -DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ - - -DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ - - -DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ - - -DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ - - -DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ - - -DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ - - -DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ - - -DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ - - -DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ - - -DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ - - -DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ - - -DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ - - -DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ - - -DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ - - -DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ - - -DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ - - -DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ - - -DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ - - -DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ - - -DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ - - -DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ - - -DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ - - -DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ - - -DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ - - -DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ - - -DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ - - -DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ - - -void func_8014BDE0(void) { -} - -DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ - - -DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ - - -DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ - - -DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ - - -DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ - - -DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ - - -DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ - - -DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ - - -DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ - - -DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ - - -DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ - - -DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ - - -DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ - - -DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ - - -DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ - - -DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ - - -DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ - - -DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014C1A0); - -DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ - - -DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ - - -DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ - - -DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ - - -DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ - - -DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ - - -DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014C4AC); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014C568); - -DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ - - - -extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); - -s16 func_8014C5D0(s32 a0, s32 a1) { - - extern u8 D_80184B78; - return func_8014C5FC(a0, a1, &D_80184B78); -} - - -DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ - - -DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ - - -DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ - - -DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ - - -DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014C6F4); - -DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ - - -DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ - - -DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ - - -DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ - - -DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ - - -DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ - - -DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ - - -DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ - - -DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ - - -DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ - - -DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ - - -DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ - - -DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ - - -DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ - - -DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ - - -DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ - - -DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ - - -DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ - - -DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ - - -DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ - - -DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ - - -DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ - - -DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ - - -DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014CBE8); - -DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ - - -DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ - - - -extern void func_8014CD0C(u8 *a0); - -void func_8014CCB4(void) -{ - - extern int D_801C6658; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014CD0C\n" - "lui $at, %%hi(D_801C6658)\n" - "sw $v0, %%lo(D_801C6658)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C6658)\n" - "lw $v0, %%lo(D_801C6658)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014CD80); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014CF04); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D04C); - -DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D12C); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D2A0); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D3E0); - -DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D4C0); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D610); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D738); - -DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014D820); - -DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ - - -DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014DF3C); - -DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ - - -DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ - - -DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014E434); - -DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ - - -DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014E5B4); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014E6A0); - -DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ - - -DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ - - -DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014E934); - -DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ - - -DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014ED28); - -DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ - - -DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014F1F4); - -DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ - - -DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014F3E8); - - -extern void func_8014F4C0(u8 *a0); - -void func_8014F468(void) -{ - - extern int D_801C665C; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F4C0\n" - "lui $at, %%hi(D_801C665C)\n" - "sw $v0, %%lo(D_801C665C)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C665C)\n" - "lw $v0, %%lo(D_801C665C)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014F4C0); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014F6F4); - -DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ - - - -// @class: other -// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801C665C; maspsx auto-fills jal delay slot) - -extern s32 func_8014FA70(s32 a0); - -void func_8014FA04(s32 a0) -{ - - extern s32 D_801C665C; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "sw $ra, 16($sp)\n" - "lw $v0, 68($a0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 1f\n" - "addu $v0, $zero, $zero\n" - "lui $a1, 0x1f80\n" - "ori $a1, $a1, 0x03fc\n" - "addu $t0, $a1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "lui $at, %%hi(D_801C665C)\n" - "sw $v0, %%lo(D_801C665C)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C665C)\n" - "lw $v0, %%lo(D_801C665C)($v0)\n" - "1:\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014FBC0); - -DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014FCFC); - -DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ - - -DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014FE60); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8014FFDC); - -DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ - - -DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801502EC); - -DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80150480); - -DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ - - -DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ - - -DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801506A4); - -DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ - - -DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ - - -DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ - - -DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ - - - -extern s32 func_80021174(s32 a0, s32 a1); - -s32 func_8015094C(s32 param_1) { - - extern S16 D_801C5CDC; - extern s32 D_80184BA8; - extern s32 D_80126990; - extern s32 D_80126994; - extern u8 D_80126948[]; - struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ - S16 local; /* 0x10 @ 0x40 */ - s32 pad1[4]; /* 0x10 @ 0x50 */ - register u8 *cam __asm__("$17") = D_80126948; - s32 ret; - - local = D_801C5CDC; - arg.x = *(short *)(param_1 + 6); - arg.mid = D_80126994; - arg.y = *(short *)(param_1 + 0xe); - ret = func_80021174(D_80184BA8, (s32)&arg); - if (ret == 0) { - { - short cur = *(short *)(param_1 + 6); - s32 diff = D_80126990 - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - { - short cur = *(short *)(param_1 + 0xe); - s32 diff = *(s32 *)(cam + 0x50) - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - (void)&pad1; - return 1; - } - return 0; -} - - - -extern s32 func_8014FA70(s32 a0); -extern void func_80015978(s32 a0, s32 *a1); - -void func_80150A70(s32 a0) -{ - - extern s32 D_801C665C; - __asm__ __volatile__( - ".set\tnoreorder\n" - "addiu $sp, $sp, -24\n" - "sw $s0, 16($sp)\n" - "addu $s0, $a0, $zero\n" - "sw $ra, 20($sp)\n" - "lh $v1, 6($s0)\n" - "lh $v0, 136($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 10($s0)\n" - "lh $v0, 138($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 14($s0)\n" - "lh $v0, 140($s0)\n" - "nop\n" - "beq $v1, $v0, 3f\n" - "nop\n" - "1:\n" - "lw $v0, 68($s0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 2f\n" - "addiu $a0, $s0, 4\n" - "lui $a2, 0x1f80\n" - "ori $a2, $a2, 0x03fc\n" - "addu $t0, $a2, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "addu $a0, $s0, $zero\n" - "lui $at, %%hi(D_801C665C)\n" - "sw $v0, %%lo(D_801C665C)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "addiu $a0, $s0, 4\n" - "2:\n" - "jal func_80015978\n" - "addiu $a1, $s0, 136\n" - "3:\n" - "lw $ra, 20($sp)\n" - "lw $s0, 16($sp)\n" - "addiu $sp, $sp, 24\n" - ".set\treorder\n" - : : : "memory"); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) - - -void func_80150B28(int param_1) { - - extern s32 D_800AE6B0; - extern void (*D_80184BAC[])(void); - u32 idx; - register u32 sub __asm__("$2"); - - if ((D_800AE6B0 & 0x80FFFFFF) == 0) { - idx = *(u16 *)(param_1 + 0x16C); - if (idx != 0 && idx < 0x26) { - sub = idx - 1; - D_80184BAC[sub](); - } - } - *(u16 *)(param_1 + 0x16C) = 0; -} - - -void func_80150B9C(void) { -} - -DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ - - -DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ - - -DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ - - -DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ - - -DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ - - -DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ - - -DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ - - -DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ - - -DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ - - -DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ - - -DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ - - -DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ - - -DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ - - -DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ - - -DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ - - -DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ - - -DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ - - -DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ - - -DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ - - -DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ - - -DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ - - -void func_80150F78(void) { -} - -DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ - - -DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ - - -DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ - - -DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ - - -DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ - - -DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ - - -DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ - - -void func_801510B8(void) { -} - -void func_801510C0(void) { -} - -DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ - - -DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ - - -DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ - - -void func_80151130(void) { -} - -DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ - - -DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ - - -DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ - - -DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ - - -DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ - - -DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ - - -DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ - - -DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ - - -DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ - - -DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80151664); - -DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ - - -DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ - - -DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ - - -void func_80151878(void) { -} - -DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ - - -DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ - - -DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80151944); - -DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ - - -DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ - - -DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80151B98); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80151C54); - - - -void func_80151D24(void *a0) { - - extern void (*D_80184C50[])(void); - D_80184C50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ - - -DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ - - -DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ - - -DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ - - -DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ - - -DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ - - - - -void func_80152058(void *a0) { - - extern void (*D_80184C74[])(void); - D_80184C74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); - -void func_801520DC(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_80184C64; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_801472C8(arg0); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_80184C64); - func_801477E8(arg0, 0x40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); - func_80147324(0x441); - func_80146CA0(arg0); -} - - -DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ - - -DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ - - -DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801470AC(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80153C18(); -void func_801522CC(s32 a0) { - s32 v1; - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - func_80154A74(a0, 0x11); - func_801553C0(a0); - func_801470AC((s32 *)a0); - func_801472B4((void *)a0); - v1 = *(s32 *)(a0 + 0x20); - *(s16 *)(a0 + 0x3E) = 0; - *(s16 *)(a0 + 0x40) = 0; - *(s16 *)(a0 + 0x42) = 0; - *(u8 *)(a0 + 0xDD) = 0; - *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; - *(s16 *)(v1 + 0x10) = 0; - *(u16 *)(a0 + 0x60) = 0x1000; - *(u16 *)(a0 + 0x62) = 0x1000; - *(u16 *)(a0 + 0x64) = 0x1000; - func_801477E8((s32 *)a0, 0); - func_80153C18(a0); -} - - - - -void func_80152370(void *a0) { - - extern void (*D_80184C88[])(void); - D_80184C88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (67 ins) - -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80019064(void *a0); -extern int func_80151204(int arg, int a1); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - - -void func_801523F4(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern s32 D_800D58AC; - extern u8 D_80184C94[]; - s32 pad[4]; - s32 buf[4]; - register s32 s0a __asm__("$16"); /* $s0 = buf */ - register s32 s2a __asm__("$18") = (s32)&D_80184C94; /* $s2 = &D_80184C94 */ - - ((void (*)(s32, s32))func_80146E90)(arg0, 0); - func_80019064(&D_80062C04); - ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); - if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), - (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); - } else { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); - } - func_80154A74(arg0, 0x16); - ((void (*)(s32))func_80149020)(arg0); - s0a = (s32)buf; - ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, - s2a, s0a); - ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); - ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); - func_80147324(0x451); - ((void (*)(s32))func_80146CA0)(arg0); - (void)pad; -} - - -DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ - - -DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ - - - - -void func_80152698(void *a0) { - - extern void (*D_80184CA4[])(void); - D_80184CA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ - - -DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ - - -DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ - - - - -void func_8015282C(void *a0) { - - extern void (*D_80184CBC[])(void); - D_80184CBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_801528B0(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_80184CAC; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_80184CAC); - func_801477E8(arg0, 0xFFF00000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ - - -DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ - - -DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ - - -DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ - - - - -void func_80152B6C(void *a0) { - - extern void (*D_80184CD0[])(void); - D_80184CD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ - - -DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ - - -DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ - - -DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ - - - - -void func_80152D24(void *a0) { - - extern void (*D_80184CEC[])(void); - D_80184CEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_80152DA8(s32 arg0) -{ - - extern s32 D_80062C14; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_80184CDC; - func_80019064(&D_80062C14); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - M2C_FIELD(arg0, s8 *, 0xDF) = 8; - func_80146DB8(arg0, &D_80184CDC); - func_801477E8(arg0, 0xFFE40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ - - -DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ - - -DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ - - -DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ - - - - -void func_80153060(void *a0) { - - extern void (*D_80184D00[])(void); - D_80184D00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ - - -DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ - - -DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ - - -DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ - - -DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ - - -DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ - - - - -void func_80153320(void *a0) { - - extern void (*D_80184D14[])(void); - D_80184D14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ - - -DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ - - -DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ - - -DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ - - -DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ - - -DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ - - -extern void func_80146D90(s32 a0); -extern void func_8014CC28(s32 a0); -extern void func_8014ED28(s32 _arg0); -extern void func_8014FA04(s32 a0); - -s32 func_801535F4(void *arg0) { - s32 var_s1; - register u32 flags __asm__("$4"); - register u32 fcopy __asm__("$3"); - s32 ret; - - var_s1 = 0; - if (((s32 (*)(void))func_8014ED28)() != 0) { - func_80146D90((s32)arg0); - } - if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && - (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { - var_s1 = 1; - } - flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); - fcopy = flags; - if (flags & 0x4000) { - ret = 2; - } else if (flags & 0x2000) { - ret = 1; - } else { - ret = 4; - if ((fcopy & 0x8000) == 0) { - ret = var_s1; - } - } - __asm__ __volatile__("" : : "r"(flags)); - return ret; -} - - -DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ - - -DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ - - -DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ - - -DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ - - -DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ - - -DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ - - -DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ - - -DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ - - -DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ - - -DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ - - -DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ - - -DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ - - -DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ - - -DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ - - -DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls -extern void func_80019064(void *a0); - -void func_80153CCC(S80153CCC *a0) { - - extern s32 D_80184D28; - extern void (*D_80184D50[])(void *a0); - extern s16 D_8011DB0C; - extern u16 D_8011F748; - ((s32 (*)(s32))func_80019064)((s32)&D_80184D28); - D_80184D50[a0->idx](a0); - D_8011DB0C = 0; - D_8011F748 = 0; -} - - -DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (33/33) - -extern void func_80147324(s32 arg0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_80146CA0(void *a0); -extern s16 currentLocationId; - -void func_80153D7C(s32 param_1) -{ - - extern u8 D_80184D30; - func_80147324(0x451); - func_80154274((s32 *)param_1, (s32)&D_80184D30); - func_80149020((s32 *)param_1); - *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); - *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); - *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); - if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; - else *(u8 *)(param_1 + 0xde) = 10; - *(u8 *)(param_1 + 0xdf) = 0; - __asm__ __volatile__("" ::: "memory"); - func_80146CA0((void *)param_1); -} - - -DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ - - -DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ - - -DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ - - -DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ - - -DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ - - -DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ - - -DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ - - -DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ - - -DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ - - -DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ - - -DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ - - -DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ - - -DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801549F8); - -DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ - - -DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ - - -DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ - - -DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ - - -DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ - - -DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ - - -DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ - - -DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ - - -DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ diff --git a/src/ov_SC07_007/ov_SC07_007_jr_80140608.c b/src/ov_SC07_007/ov_SC07_007_jr_80140608.c new file mode 100644 index 000000000..9d65eb806 --- /dev/null +++ b/src/ov_SC07_007/ov_SC07_007_jr_80140608.c @@ -0,0 +1,4661 @@ +#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 { s32 w[8]; } Vec8; +typedef struct { s32 m[3][3]; s32 t[3]; } MATRIX; +typedef struct { s32 vx, vy, vz; } VECTOR; +typedef struct { s16 h[8]; } Buf; +typedef struct { char _b[8]; } M8; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { s16 x, y, z; } Vec3s; +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_8014ED28(s32 _arg0); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern void func_80129010(void); +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern u8 D_80126948[]; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_80129CF8(void); +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern void func_8012A464(void); +extern s32 D_801151D4; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 D_80126B58; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern s32 func_8012E778(int param_1, int param_2); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_80130D0C(s32 a0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_80131E00(); +extern s32 D_801C64E8; +extern s32 D_801C64EC; +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_801345F8(s32 arg); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_801379FC(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 D_80127548[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s16 D_801269F4; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_8013CA14(void); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern void func_8013D9B0(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern void func_8013D330(void); +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_800190AC(void); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511A; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_80183FCC[]; +extern u8 D_80183FE4[]; +extern u16 D_80183EE8[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + + extern u8 *D_80183F88; + extern u8 *D_80183F8C; + extern u8 *D_80183F90; + extern u8 *D_80183F94; + extern u8 *D_80183F98; + extern u16 *D_80183F9C[]; + extern u16 *D_80183FA4[]; + extern u16 *D_80183FC4[]; + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183F88; + iVar2 = func_80028D58(); + puVar3 = D_80183F9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_80183F8C; + iVar2 = func_80028DE0(); + puVar3 = D_80183F9C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80183F90 + 0x18) = *D_80183FA4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80183F94 + 0x18) = *D_80183FA4[iVar2]; + + puVar1 = D_80183F98; + iVar2 = func_80028D9C(); + puVar3 = D_80183FC4[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + + extern unsigned char D_80078E7F; + extern unsigned char D_80078E7E; + extern unsigned char D_80078E7D; + extern M2C_UNK D_80183EC4; + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80183EC4); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + + extern short D_80115128; + extern u8 D_80183ED4; + extern char *D_80183EF4; + extern char *D_80183EF8; + extern char *D_80183EFC; + extern char *D_80183F00; + extern char *D_80183F04; + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80183ED4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80183EF4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183EF8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183EFC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183F00; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80183F04; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + + +// @class: other +// @stuck: none — MATCH + + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + + extern short D_80115128; + extern unsigned short D_80115172; + extern unsigned short D_80183D8E; + extern unsigned short D_80183D92; + extern unsigned short D_80183D96; + extern unsigned short D_80183D9A; + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80183D8E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80183D92; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80183D96; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80183D9A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ + + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ + + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ + + + + +void func_80141788(void) +{ + + extern unsigned short D_80115112; + extern void (*D_80184324[])(void); + D_80184324[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ + + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ + + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + + +void func_80141874(void) { + + extern u16 D_8011511E; + extern u16 D_8011511C; + extern unsigned short D_80115112; + extern u16 D_80115116; + extern void (*D_80184330[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_80184330[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80183F48; + extern u8 D_80183F60; + extern u8 D_80183FD4; + extern u8 D_80183FDC; + extern s16 D_801842A8; + extern s16 D_801842AA; + extern void *D_801C6608; + extern void *D_801C660C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801C6608 = &D_80183F48; + D_801C660C = &D_80183FD4; + } else { + D_801C6608 = &D_80183F60; + D_801C660C = &D_80183FDC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_801842A8 = 0xE; + D_801842AA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_801842AC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_801842AC; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_801842AC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80141B90); + +void func_80141C04(void) { +} + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + + extern u16 D_80115110; + extern u8 D_80184284; + func_8002D4C8(*(u16 *)(&D_80184284 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ + + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ + + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_80184354[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_80184354[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + + +void func_801425CC(void *a0) { + + extern void (*D_80184364[])(void); + D_80184364[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); + +void func_80142608(s32 param_1) +{ + + extern s32 D_80184348; + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_80184348); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ + + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + + +void func_801427DC(void) { +} + +void func_801427E4(void) { +} + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801427EC(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_80184378[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_80184378[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80142838); + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_8014292C(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_80184394[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_80184394[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_80142978(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_80184564[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_80184564[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801429C4(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8018461C[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8018461C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + + +void func_80142A80(void) +{ + + extern u16 D_800B99D8; + extern struct packed_word D_801C5CD8; + extern u8 D_801C6610; + extern u8 D_801C6611; + extern u8 D_801C6612; + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801C5CD8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801C6610 = mul * (local.b[0] >> 4); + D_801C6611 = mul * (local.b[1] >> 4); + D_801C6612 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80142B2C); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80142BB4); + +void func_80142C7C(void) { +} + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ + + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ + + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ + + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142DC4(int param_1) +{ + + extern int D_8018436C; + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8018436C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142E38(int param_1) +{ + + extern unsigned char D_80184388[]; + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80184388); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_80184554[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_80184554[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80142F68); + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_8014305C(int param_1) +{ + + extern unsigned char D_80184574[]; + extern unsigned char D_801845D4[]; + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80184574); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_801845D4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801430F4); + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + + +void func_801431E8(s32 param_1) { + + extern u8 D_801C5CD4; + extern u8 D_801C6610; + extern u8 D_801C6614; + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801C5CD4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801C6610); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801C6610, 0x10); + memcpy(&D_801C6614, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ + + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801433F0); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + + extern u8 D_800D387C[]; + extern u32 D_8018472C[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8018472C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014350C); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_8014358C(s32 param_1) +{ + + extern u8 D_8018473C[]; + extern u32 D_80184838[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_8018473C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_80184838[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ + + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ + + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ + + + + +void func_80143B30(void *a0) { + + extern void (*D_80184854[])(void); + D_80184854[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ + + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ + + + + +void func_80143C38(void *a0) { + + extern void (*D_80184860[])(void); + D_80184860[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ + + + + +void func_80143C98(void *a0) { + + extern void (*D_80184868[])(void); + D_80184868[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80143D28); + + + +void func_80143E68(void *a0) { + + extern void (*D_801848B0[])(void); + D_801848B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80143EA4(void) { +} + +void func_80143EAC(void) { +} + +void func_80143EB4(void) { +} + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ + + + + +void func_80144054(void *a0) { + + extern void (*D_801848C4[])(void); + D_801848C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + + +void func_801442F8(int param_1) +{ + + extern void (*D_801848CC[])(); + int iVar1; + + D_801848CC[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +void func_80144364(int param_1) { + + extern u8 D_80184848; + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_80184848, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80144458); + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014462C); + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); + +void func_8014477C(void *param_1) { + + extern u8 D_80184870; + extern u8 D_8018487C; + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80184870); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018487C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + + +void func_80144880(s32 param_1) +{ + + extern u8 D_80184848; + extern u8 D_801848B8; + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_80184848, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_801848B8, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + + + +void func_801449C8(void *a0) { + + extern void (*D_801848D4[])(void); + D_801848D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ + + + + +void func_80144A2C(void *a0) { + + extern void (*D_801848DC[])(void); + D_801848DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ + + +void func_80144A90(void) { +} + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ + + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80144B14); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80144B9C); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801457A4); + +void func_801458E0(void) { +} + +DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80185468 block defeats the tail-merge of the two identical D_80185468 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145934(void) { + + extern u8 D_80185468; + extern u8 D_801853D8; + extern u8 D_801853B4; + extern u8 D_80185390; + extern u8 D_80185444; + extern u8 D_80185420; + extern u8 D_801853FC; + extern u8 D_8018536C; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_80185468; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80185468 load from being + * tail-merged with the v>=0x384 D_80185468 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_801853D8; + } else if (v >= 0x578) { + p = &D_801853B4; + } else if (v >= 0x514) { + p = &D_80185390; + } else if (v >= 0x384) { + p = &D_80185468; + } else if (v >= 0x258) { + p = &D_80185444; + } else if (v >= 0xC8) { + p = &D_80185420; + } else if (v >= 0xA) { + p = &D_801853FC; + } else { + p = &D_8018536C; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801854F8 block defeats the tail-merge of the two identical D_801854F8 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145A2C(void) { + + extern u8 D_801854F8; + extern u8 D_801853D8; + extern u8 D_801853B4; + extern u8 D_80185390; + extern u8 D_801854D4; + extern u8 D_801854B0; + extern u8 D_8018548C; + extern u8 D_8018536C; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_801854F8; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801854F8 load from being + * tail-merged with the v>=0x384 D_801854F8 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_801853D8; + } else if (v >= 0x578) { + p = &D_801853B4; + } else if (v >= 0x514) { + p = &D_80185390; + } else if (v >= 0x384) { + p = &D_801854F8; + } else if (v >= 0x258) { + p = &D_801854D4; + } else if (v >= 0xC8) { + p = &D_801854B0; + } else if (v >= 0xA) { + p = &D_8018548C; + } else { + p = &D_8018536C; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + +DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ + + +DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ + + +DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80145CEC); + + + +// @class: schedule +// @stuck: branch layout — 3-way dispatch on param_1; trying switch form + +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); + + +void func_80145EE8(s32 param_1) +{ + + extern unsigned char D_801848F0[]; + extern unsigned char D_80184920[]; + extern unsigned char D_80184970[]; + extern unsigned char D_801849A0[]; + extern unsigned char D_801849D0[]; + switch (param_1) { + case 0: + if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { + ((void (*)(void *))func_80146014)(D_801848F0); + } + if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { + ((void (*)(void *))func_80146014)(D_80184920); + } + if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { + ((void (*)(void *))func_80146014)(D_80184970); + } + if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { + ((void (*)(void *))func_80146014)(D_801849A0); + } + if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { + return; + } + ((void (*)(void *))func_80146014)(D_801849D0); + break; + case 1: + ((void (*)(void *))func_80146014)(D_801848F0); + ((void (*)(void *))func_80146014)(D_80184920); + ((void (*)(void *))func_80146014)(D_80184970); + ((void (*)(void *))func_80146014)(D_801849A0); + ((void (*)(void *))func_80146014)(D_801849D0); + break; + } +} + + +DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ + + +void func_80146074(void) { +} + + +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); + +void func_8014607C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146128\n" + "lui $at, %%hi(D_801C6650)\n" + "sw $v0, %%lo(D_801C6650)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C6650)\n" + "lw $v0, %%lo(D_801C6650)($v0)\n" + "nop\n" + "beqz $v0, .L80146114\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146360\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_801463A0\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + ".L80146114:\n" + "nop\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (fnptr-table idiom: D_80184A20[u8 idx](&arg)) + +void func_80146360(void) +{ + + extern void (*D_80184A20[])(void *); + extern u8 D_80126BA4; + extern s32 D_80126B58; + D_80184A20[D_80126BA4](&D_80126B58); +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801463A0); + +DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ + + +DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ + + +DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ + + +DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ + + +DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ + + +DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ + + +DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ + + +DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801466F0); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80146750); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014680C); + +DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ + + +DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ + + +DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ + + +DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80146A6C); + +DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80146AFC); + +DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ + + +DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ + + +DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ + + +DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ + + +DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ + + +DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ + + +DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ + + +DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ + + +DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ + + +DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ + + +DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ + + +DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ + + +DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ + + +DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ + + +DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80146F58); + +DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ + + +DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ + + +DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ + + +DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ + + +DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ + + +DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ + + +DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ + + +DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ + + +DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ + + +DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ + + +DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ + + +DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ + + +DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ + + +DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ + + +DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ + + +DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ + + +DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ + + +DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ + + +DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ + + +DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ + + +DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ + + +DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80147364); + +DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ + + +DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ + + +DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ + + +DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ + + +DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ + + +DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ + + +DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ + + +DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ + + +DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ + + +DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ + + +DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ + + +DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ + + +DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ + + +DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ + + +DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ + + +DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ + + +DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ + + +DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ + + +DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ + + +DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ + + +DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ + + +DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ + + +DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ + + +DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ + + +DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ + + +DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ + + +DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ + + +DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ + + +DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ + + +DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ + + +DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ + + +DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ + + +DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ + + +DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ + + +DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ + + +DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801483E8); + +DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ + + +DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ + + +DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ + + +DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ + + +DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ + + +DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ + + +DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ + + +DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ + + +DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ + + +DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ + + +DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ + + +DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ + + +DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ + + +DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ + + +DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ + + +DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ + + +DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ + + +DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg + +extern s32 ratan2(s32 a0, s32 a1); + +int func_80148AFC(void *a0) { + + extern s32 D_801151D4; + extern ActorFn D_80184A28[]; + s32 p = (s32)a0; + s32 iVar5 = *(s32 *)(p + 0x20); + register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 sVar3; + u8 bVar1; + __asm__("" : "=r"(tmp) : "0"(tmp)); + sVar3 = tmp; + bVar1 = *(u8 *)(p + 0xA9); + + switch (bVar1) { + case 0x41: + return D_80184A28[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; + case 0x53: + case 0x73: + { + register u32 bb __asm__("$3"); + register s32 c80 __asm__("$2") = 0x80; + register s32 lo __asm__("$4"); + register s32 hi __asm__("$2"); + bb = *(u16 *)(p + 0xAE); + lo = bb & 0xFF; + if (lo != c80 || (hi = bb >> 8) != 0x80) { + s32 sVar4; + __asm__ __volatile__("" : : : "memory"); + sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); + *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; + return 1; + } + return 0; + } + } +} + + +DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ + + +DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ + + +DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ + + +DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ + + +DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ + + +DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ + + +DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ + + +DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ + + +DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ + + +DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ + + +DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ + + +DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ + + +DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ + + +DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ + + +DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ + + +DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (68 ins) +extern s32 ratan2(s32 a0, s32 a1); + +s32 func_80148D44(void) { + + extern s32 D_801151D4; + extern u8 D_80126C01; + extern u16 D_80126C02; + extern u16 D_80126C06; + extern s32 D_80184A68[]; + register s32 ang __asm__("$16"); + register s32 a __asm__("$4"); + s32 p; + s32 res; + s32 d; + + p = D_801151D4; + a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), + *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; + d = (s32)D_80126C01; + __asm__ __volatile__("" : : "r"(a)); + ang = a; + if (d == 0x53) { + goto final; + } + if (d < 0x54) { + if (d == 0x41) { + goto call; + } + return 0x41; + } + if (d != 0x73) { + return 0x73; + } + goto final; +call: + return (s32)(s16)((s16 (*)())(D_80184A68[D_80126C02 >> 0xc]))(); +final: + { + u32 e = D_80126C06; + if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { + return -1; + } + __asm__ __volatile__("" : : : "memory"); + res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; + } + return res; +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80148E54); + +DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ + + +DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ + + +DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ + + +DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ + + +DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ + + +DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ + + +DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ + + +DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ + + +DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ + + +DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ + + +DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ + + +DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ + + +DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ + + +DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ + + +DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ + + +DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ + + +DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ + + +DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ + + +DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ + + +DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ + + +DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ + + +DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ + + +DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ + + +DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ + + +DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ + + +DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ + + +DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ + + +DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ + + +DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ + + +DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ + + +DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ + + +DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ + + +DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80149350); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80149374); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801493D0); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014942C); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80149450); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801494CC); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80149544); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80149584); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801495C4); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014964C); + +DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ + + +DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ + + +DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ + + +DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ + + +DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801497A8); + +DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ + + +DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ + + +DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ + + +DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80149954); + +DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ + + +DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ + + +DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ + + +DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ + + +DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ + + +DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ + + +DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ + + +DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ + + +DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ + + +DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ + + +DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ + + +DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ + + +DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ + + +DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ + + +DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80149F2C); + +void func_80149FA8(void) { +} + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins) +extern s16 currentLocationId; + +s32 func_80149FB0(s32 a0) { + + extern s32 D_80184AE8[]; + extern u8 D_80078E78[]; + s32 *p = &D_80184AE8[0]; + register s32 v __asm__("$3") = *p; + u8 *q = &D_80078E78[0]; + s32 loc; + + if (v != 0) { + loc = currentLocationId; + p = p + 1; + do { + if (loc == v) { + goto ret0; + } + v = *p; + p = p + 1; + } while (v != 0); + } + + if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { + return 0; + } + if (*(s16 *)(a0 + 0x1C8) != 0) { + return 0; + } + if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { + ret0: + return 0; + } + v = q[0x48]; + q[0x48] = v ^ 0x80; + return 1; +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014A048); + +DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ + + +DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ + + +DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ + + +DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ + + +DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ + + +DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ + + +DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ + + +DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ + + +DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014A51C); + +DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ + + +DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ + + +DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ + + +DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ + + +DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ + + +DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ + + +DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ + + +DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014A738); + +DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ + + +DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ + + +DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ + + +DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ + + +DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ + + +DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ + + +DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ + + +DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ + + +DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ + + +DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ + + +DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ + + +DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ + + +DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ + + +DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ + +DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ + + +DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ + + +DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ + + +DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ + + +DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ + + +DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ + + +DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ + + +DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ + + +DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ + + +DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ + + +DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ + + +DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ + + +DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ + + +DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ + + +DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ + + +DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ + + +DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ + + +DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ + + +DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ + + +DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ + + +DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ + + +DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ + + +DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ + + +DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ + + +DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ + + +DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ + + +DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ + + +DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ + + +DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ + + +DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ + + +DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ + + +DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ + + +DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ + + +DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ + + +DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ + + +DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ + + +DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ + + +void func_8014BDE0(void) { +} + +DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ + + +DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ + + +DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ + + +DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ + + +DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ + + +DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ + + +DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ + + +DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ + + +DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ + + +DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ + + +DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ + + +DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ + + +DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ + + +DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ + + +DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ + + +DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ + + +DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ + + +DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014C1A0); + +DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ + + +DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ + + +DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ + + +DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ + + +DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ + + +DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ + + +DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014C4AC); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014C568); + +DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ + + + +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); + +s16 func_8014C5D0(s32 a0, s32 a1) { + + extern u8 D_80184B78; + return func_8014C5FC(a0, a1, &D_80184B78); +} + + +DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ + + +DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ + + +DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ + + +DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ + + +DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014C6F4); + +DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ + + +DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ + + +DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ + + +DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ + + +DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ + + +DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ + + +DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ + + +DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ + + +DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ + + +DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ + + +DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ + + +DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ + + +DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ + + +DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ + + +DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ + + +DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ + + +DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ + + +DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ + + +DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ + + +DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ + + +DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ + + +DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ + + +DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ + + +DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014CBE8); + +DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ + + +DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ + + + +extern void func_8014CD0C(u8 *a0); + +void func_8014CCB4(void) +{ + + extern int D_801C6658; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014CD0C\n" + "lui $at, %%hi(D_801C6658)\n" + "sw $v0, %%lo(D_801C6658)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C6658)\n" + "lw $v0, %%lo(D_801C6658)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014CD80); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014CF04); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D04C); + +DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D12C); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D2A0); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D3E0); + +DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D4C0); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D610); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D738); + +DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014D820); + +DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ + + +DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014DF3C); + +DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ + + +DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ + + +DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014E434); + +DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ + + +DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014E5B4); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014E6A0); + +DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ + + +DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ + + +DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014E934); + +DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ + + +DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014ED28); + +DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ + + +DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014F1F4); + +DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ + + +DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014F3E8); + + +extern void func_8014F4C0(u8 *a0); + +void func_8014F468(void) +{ + + extern int D_801C665C; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F4C0\n" + "lui $at, %%hi(D_801C665C)\n" + "sw $v0, %%lo(D_801C665C)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C665C)\n" + "lw $v0, %%lo(D_801C665C)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014F4C0); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014F6F4); + +DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ + + + +// @class: other +// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801C665C; maspsx auto-fills jal delay slot) + +extern s32 func_8014FA70(s32 a0); + +void func_8014FA04(s32 a0) +{ + + extern s32 D_801C665C; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "sw $ra, 16($sp)\n" + "lw $v0, 68($a0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 1f\n" + "addu $v0, $zero, $zero\n" + "lui $a1, 0x1f80\n" + "ori $a1, $a1, 0x03fc\n" + "addu $t0, $a1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "lui $at, %%hi(D_801C665C)\n" + "sw $v0, %%lo(D_801C665C)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C665C)\n" + "lw $v0, %%lo(D_801C665C)($v0)\n" + "1:\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014FBC0); + +DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014FCFC); + +DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ + + +DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014FE60); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014FFDC); + +DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ + + +DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801502EC); + +DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80150480); + +DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ + + +DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ + + +DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801506A4); + +DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ + + +DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ + + +DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ + + +DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ + + + +extern s32 func_80021174(s32 a0, s32 a1); + +s32 func_8015094C(s32 param_1) { + + extern S16 D_801C5CDC; + extern s32 D_80184BA8; + extern s32 D_80126990; + extern s32 D_80126994; + extern u8 D_80126948[]; + struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ + S16 local; /* 0x10 @ 0x40 */ + s32 pad1[4]; /* 0x10 @ 0x50 */ + register u8 *cam __asm__("$17") = D_80126948; + s32 ret; + + local = D_801C5CDC; + arg.x = *(short *)(param_1 + 6); + arg.mid = D_80126994; + arg.y = *(short *)(param_1 + 0xe); + ret = func_80021174(D_80184BA8, (s32)&arg); + if (ret == 0) { + { + short cur = *(short *)(param_1 + 6); + s32 diff = D_80126990 - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + { + short cur = *(short *)(param_1 + 0xe); + s32 diff = *(s32 *)(cam + 0x50) - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + (void)&pad1; + return 1; + } + return 0; +} + + + +extern s32 func_8014FA70(s32 a0); +extern void func_80015978(s32 a0, s32 *a1); + +void func_80150A70(s32 a0) +{ + + extern s32 D_801C665C; + __asm__ __volatile__( + ".set\tnoreorder\n" + "addiu $sp, $sp, -24\n" + "sw $s0, 16($sp)\n" + "addu $s0, $a0, $zero\n" + "sw $ra, 20($sp)\n" + "lh $v1, 6($s0)\n" + "lh $v0, 136($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 10($s0)\n" + "lh $v0, 138($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 14($s0)\n" + "lh $v0, 140($s0)\n" + "nop\n" + "beq $v1, $v0, 3f\n" + "nop\n" + "1:\n" + "lw $v0, 68($s0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 2f\n" + "addiu $a0, $s0, 4\n" + "lui $a2, 0x1f80\n" + "ori $a2, $a2, 0x03fc\n" + "addu $t0, $a2, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "addu $a0, $s0, $zero\n" + "lui $at, %%hi(D_801C665C)\n" + "sw $v0, %%lo(D_801C665C)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "addiu $a0, $s0, 4\n" + "2:\n" + "jal func_80015978\n" + "addiu $a1, $s0, 136\n" + "3:\n" + "lw $ra, 20($sp)\n" + "lw $s0, 16($sp)\n" + "addiu $sp, $sp, 24\n" + ".set\treorder\n" + : : : "memory"); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) + + +void func_80150B28(int param_1) { + + extern s32 D_800AE6B0; + extern void (*D_80184BAC[])(void); + u32 idx; + register u32 sub __asm__("$2"); + + if ((D_800AE6B0 & 0x80FFFFFF) == 0) { + idx = *(u16 *)(param_1 + 0x16C); + if (idx != 0 && idx < 0x26) { + sub = idx - 1; + D_80184BAC[sub](); + } + } + *(u16 *)(param_1 + 0x16C) = 0; +} + + +void func_80150B9C(void) { +} + +DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ + + +DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ + + +DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ + + +DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ + + +DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ + + +DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ + + +DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ + + +DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ + + +DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ + + +DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ + + +DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ + + +DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ + + +DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ + + +DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ + + +DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ + + +DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ + + +DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ + + +DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ + + +DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ + + +DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ + + +DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ + + +void func_80150F78(void) { +} + +DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ + + +DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ + + +DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ + + +DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ + + +DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ + + +DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ + + +DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ + + +void func_801510B8(void) { +} + +void func_801510C0(void) { +} + +DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ + + +DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ + + +DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ + + +void func_80151130(void) { +} + +DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ + + +DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ + + +DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ + + +DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ + + +DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ + + +DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ + + +DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ + + +DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ + + +DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ + + +DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80151664); + +DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ + + +DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ + + +DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ + + +void func_80151878(void) { +} + +DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ + + +DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ + + +DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80151944); + +DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ + + +DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ + + +DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80151B98); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80151C54); + + + +void func_80151D24(void *a0) { + + extern void (*D_80184C50[])(void); + D_80184C50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ + + +DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ + + +DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ + + +DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ + + +DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ + + +DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ + + + + +void func_80152058(void *a0) { + + extern void (*D_80184C74[])(void); + D_80184C74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); + +void func_801520DC(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_80184C64; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_801472C8(arg0); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_80184C64); + func_801477E8(arg0, 0x40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); + func_80147324(0x441); + func_80146CA0(arg0); +} + + +DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ + + +DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ + + +DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801470AC(s32 *a0); +extern void func_801472B4(void *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80153C18(); +void func_801522CC(s32 a0) { + s32 v1; + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + func_80154A74(a0, 0x11); + func_801553C0(a0); + func_801470AC((s32 *)a0); + func_801472B4((void *)a0); + v1 = *(s32 *)(a0 + 0x20); + *(s16 *)(a0 + 0x3E) = 0; + *(s16 *)(a0 + 0x40) = 0; + *(s16 *)(a0 + 0x42) = 0; + *(u8 *)(a0 + 0xDD) = 0; + *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; + *(s16 *)(v1 + 0x10) = 0; + *(u16 *)(a0 + 0x60) = 0x1000; + *(u16 *)(a0 + 0x62) = 0x1000; + *(u16 *)(a0 + 0x64) = 0x1000; + func_801477E8((s32 *)a0, 0); + func_80153C18(a0); +} + + + + +void func_80152370(void *a0) { + + extern void (*D_80184C88[])(void); + D_80184C88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (67 ins) + +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80019064(void *a0); +extern int func_80151204(int arg, int a1); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + + +void func_801523F4(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern s32 D_800D58AC; + extern u8 D_80184C94[]; + s32 pad[4]; + s32 buf[4]; + register s32 s0a __asm__("$16"); /* $s0 = buf */ + register s32 s2a __asm__("$18") = (s32)&D_80184C94; /* $s2 = &D_80184C94 */ + + ((void (*)(s32, s32))func_80146E90)(arg0, 0); + func_80019064(&D_80062C04); + ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); + if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), + (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); + } else { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); + } + func_80154A74(arg0, 0x16); + ((void (*)(s32))func_80149020)(arg0); + s0a = (s32)buf; + ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, + s2a, s0a); + ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); + ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); + func_80147324(0x451); + ((void (*)(s32))func_80146CA0)(arg0); + (void)pad; +} + + +DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ + + +DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ + + + + +void func_80152698(void *a0) { + + extern void (*D_80184CA4[])(void); + D_80184CA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ + + +DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ + + +DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ + + + + +void func_8015282C(void *a0) { + + extern void (*D_80184CBC[])(void); + D_80184CBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_801528B0(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_80184CAC; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_80184CAC); + func_801477E8(arg0, 0xFFF00000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ + + +DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ + + +DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ + + +DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ + + + + +void func_80152B6C(void *a0) { + + extern void (*D_80184CD0[])(void); + D_80184CD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ + + +DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ + + +DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ + + +DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ + + + + +void func_80152D24(void *a0) { + + extern void (*D_80184CEC[])(void); + D_80184CEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_80152DA8(s32 arg0) +{ + + extern s32 D_80062C14; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_80184CDC; + func_80019064(&D_80062C14); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + M2C_FIELD(arg0, s8 *, 0xDF) = 8; + func_80146DB8(arg0, &D_80184CDC); + func_801477E8(arg0, 0xFFE40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ + + +DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ + + +DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ + + +DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ + + + + +void func_80153060(void *a0) { + + extern void (*D_80184D00[])(void); + D_80184D00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ + + +DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ + + +DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ + + +DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ + + +DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ + + +DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ + + + + +void func_80153320(void *a0) { + + extern void (*D_80184D14[])(void); + D_80184D14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ + + +DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ + + +DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ + + +DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ + + +DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ + + +DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ + + +extern void func_80146D90(s32 a0); +extern void func_8014CC28(s32 a0); +extern void func_8014ED28(s32 _arg0); +extern void func_8014FA04(s32 a0); + +s32 func_801535F4(void *arg0) { + s32 var_s1; + register u32 flags __asm__("$4"); + register u32 fcopy __asm__("$3"); + s32 ret; + + var_s1 = 0; + if (((s32 (*)(void))func_8014ED28)() != 0) { + func_80146D90((s32)arg0); + } + if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && + (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { + var_s1 = 1; + } + flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); + fcopy = flags; + if (flags & 0x4000) { + ret = 2; + } else if (flags & 0x2000) { + ret = 1; + } else { + ret = 4; + if ((fcopy & 0x8000) == 0) { + ret = var_s1; + } + } + __asm__ __volatile__("" : : "r"(flags)); + return ret; +} + + +DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ + + +DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ + + +DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ + + +DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ + + +DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ + + +DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ + + +DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ + + +DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ + + +DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ + + +DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ + + +DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ + + +DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ + + +DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ + + +DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ + + +DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls +extern void func_80019064(void *a0); + +void func_80153CCC(S80153CCC *a0) { + + extern s32 D_80184D28; + extern void (*D_80184D50[])(void *a0); + extern s16 D_8011DB0C; + extern u16 D_8011F748; + ((s32 (*)(s32))func_80019064)((s32)&D_80184D28); + D_80184D50[a0->idx](a0); + D_8011DB0C = 0; + D_8011F748 = 0; +} + + +DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (33/33) + +extern void func_80147324(s32 arg0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_80146CA0(void *a0); +extern s16 currentLocationId; + +void func_80153D7C(s32 param_1) +{ + + extern u8 D_80184D30; + func_80147324(0x451); + func_80154274((s32 *)param_1, (s32)&D_80184D30); + func_80149020((s32 *)param_1); + *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); + *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); + *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); + if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; + else *(u8 *)(param_1 + 0xde) = 10; + *(u8 *)(param_1 + 0xdf) = 0; + __asm__ __volatile__("" ::: "memory"); + func_80146CA0((void *)param_1); +} + + +DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ + + +DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ + + +DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ + + +DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ + + +DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ + + +DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ + + +DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ + + +DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ + + +DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ + + +DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ + + +DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ + + +DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ + + +DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8015444C); + +INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_801549F8); + +DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ + + +DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ + + +DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ + + +DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ + + +DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ + + +DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ + + +DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ + + +DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ + + +DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ + diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c b/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c index d6d68561f..b890dbe2a 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017E358; -extern u8 *D_8017E35C; -extern u8 *D_8017E360; -extern u8 *D_8017E364; -extern u8 *D_8017E368; -extern u16 *D_8017E36C[]; -extern u16 *D_8017E374[]; -extern u16 *D_8017E394[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017E358; - iVar2 = func_80028D58(); - puVar3 = D_8017E36C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017E35C; - iVar2 = func_80028DE0(); - puVar3 = D_8017E36C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017E360 + 0x18) = *D_8017E374[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017E364 + 0x18) = *D_8017E374[iVar2]; - - puVar1 = D_8017E368; - iVar2 = func_80028D9C(); - puVar3 = D_8017E394[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017E294; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017E294); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017E2A4; -extern char *D_8017E2C4; -extern char *D_8017E2C8; -extern char *D_8017E2CC; -extern char *D_8017E2D0; -extern char *D_8017E2D4; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017E2A4); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017E2C4; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017E2C8; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017E2CC; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017E2D0; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017E2D4; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017E15E; -extern unsigned short D_8017E162; -extern unsigned short D_8017E166; -extern unsigned short D_8017E16A; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017E15E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017E162; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017E166; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017E16A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017E6F4[])(void); - -void func_80141788(void) -{ - D_8017E6F4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017E700[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017E700[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017E678; -extern s16 D_8017E67A; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017E318; - extern u8 D_8017E330; - extern u8 D_8017E3A4; - extern u8 D_8017E3AC; - extern void *D_801953E0; - extern void *D_801953E4; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801953E0 = &D_8017E318; - D_801953E4 = &D_8017E3A4; - } else { - D_801953E0 = &D_8017E330; - D_801953E4 = &D_8017E3AC; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017E678 = 0xE; - D_8017E67A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017E67C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017E67C; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017E67C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017E654; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017E654 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017E724[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017E724[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017E734[])(void); - -void func_801425CC(void *a0) { - D_8017E734[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017E718; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017E718); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017E748[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017E748[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017E764[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017E764[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017E934[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017E934[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017E9EC[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017E9EC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_80194AC8; -extern u8 D_801953E8; -extern u8 D_801953E9; -extern u8 D_801953EA; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_80194AC8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801953E8 = mul * (local.b[0] >> 4); - D_801953E9 = mul * (local.b[1] >> 4); - D_801953EA = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017E73C; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017E73C); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017E758[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017E758); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017E924[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017E924[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017E944[]; -extern unsigned char D_8017E9A4[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017E944); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017E9A4); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_80194AC4; -extern u8 D_801953E8; -extern u8 D_801953EC; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_80194AC4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801953E8); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801953E8, 0x10); - memcpy(&D_801953EC, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017EAFC[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017EAFC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017EC24[])(void); - -void func_80143B30(void *a0) { - D_8017EC24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017EC30[])(void); - -void func_80143C38(void *a0) { - D_8017EC30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017EC38[])(void); - -void func_80143C98(void *a0) { - D_8017EC38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017EC80[])(void); - -void func_80143E68(void *a0) { - D_8017EC80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017EC94[])(void); - -void func_80144054(void *a0) { - D_8017EC94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017EC9C[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017EC9C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017EC18; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017EC18, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017EC2C; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017EC2C * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017EC2C * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017EC40; -extern u8 D_8017EC4C; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017EC40); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017EC4C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017EC18; -extern u8 D_8017EC88; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017EC18, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017EC88, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017ECA4[])(void); - -void func_801449C8(void *a0) { - D_8017ECA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017ECAC[])(void); - -void func_80144A2C(void *a0) { - D_8017ECAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC07_008/ov_SC07_008_jr_80140608.c b/src/ov_SC07_008/ov_SC07_008_jr_80140608.c new file mode 100644 index 000000000..a63f27d38 --- /dev/null +++ b/src/ov_SC07_008/ov_SC07_008_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_80194138; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017D598[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_8019529C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801966D8; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_80194138; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017D2D4)(); +extern s16 (*D_8017D2D8)(); +extern M2C_UNK (*D_8017D2E0)(); +extern s32 (*D_8017D2E4)(); +extern s32 D_80195298; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019413C; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017D62C; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_80180B10; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017D644; +extern M2C_UNK D_8017D64C; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017D654; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017D670[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017D67C[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017D690[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017D6E0[]; +extern s16 D_8017D710[]; +extern s16 D_8017D770[]; +extern s16 D_8017D778[]; +extern s16 D_8017D798[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017D7D0[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017D828[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017D870[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017D878[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017D880[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017D888[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017D830; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017D850; +extern void func_801321B0(int param_1); +extern int D_8017D860; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_80195308; +extern s32 D_8019530C[]; +extern int D_80195310; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017D894; +extern u8 D_8017D890; +extern s16 *D_8017D898; +extern u8 D_8017D89C; +extern int D_80195308; +extern u16 D_80195318; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017D898; /* holds a pointer value (*(u16**)&D_8017D898) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017D8AC[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017D900; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017D904[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017D948; +extern u8 D_8017D98C; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017D9D0[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017DA48, D_8017DA4A, D_8017DA4C, D_8017DA4E, D_8017DA50, D_8017DA52; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_80195380; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_80195384; +extern s8 D_80195385; +extern void func_8013C9C4(void * arg0); +extern s32 D_801953A4; +extern s32 D_80195398; +extern s32 D_8019539C; +extern s32 D_801953A8; +extern void func_8013CABC(void); +extern s32 D_801953A0; +extern void func_8013CAE8(void); +extern s32 D_801953D0; +extern s32 D_801953D4; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801953B0; +extern s32 D_801953B4; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801966D2; +extern u8 D_80196746; +extern u8 D_801965FA; +extern u8 D_801966B4; +extern u8 D_801965D8; +extern u8 D_801965F9; +extern s32 D_801966B8; +extern void func_8013D330(void); +extern void *D_80195388; +extern void *D_8019538C; +extern void *D_80195390; +extern s32 D_801953B8; +extern s32 D_801953BC; +extern s32 D_801953C0; +extern s32 D_8019662C[]; +extern u8 D_8017DB40[]; +extern u8 D_8017DBE8[]; +extern u8 D_8017DA98[]; +extern u8 D_8017DB94[]; +extern u8 D_8017DC14[]; +extern u8 D_8017DAEC[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_80195394; +extern s32 D_801953C4; +extern s32 D_801953C8; +extern s32 D_801953CC; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801953AC; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017E6A0; +extern s32 D_80115188; +extern s16 D_8017E678; +extern s16 D_8017E67A; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017E67C; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017E358; +extern u8 *D_8017E35C; +extern u8 *D_8017E360; +extern u8 *D_8017E364; +extern u8 *D_8017E368; +extern u16 *D_8017E36C[]; +extern u16 *D_8017E374[]; +extern u16 *D_8017E394[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017E358; + iVar2 = func_80028D58(); + puVar3 = D_8017E36C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017E35C; + iVar2 = func_80028DE0(); + puVar3 = D_8017E36C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017E360 + 0x18) = *D_8017E374[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017E364 + 0x18) = *D_8017E374[iVar2]; + + puVar1 = D_8017E368; + iVar2 = func_80028D9C(); + puVar3 = D_8017E394[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017E294; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017E294); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017E2A4; +extern char *D_8017E2C4; +extern char *D_8017E2C8; +extern char *D_8017E2CC; +extern char *D_8017E2D0; +extern char *D_8017E2D4; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017E2A4); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017E2C4; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017E2C8; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017E2CC; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017E2D0; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017E2D4; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017E15E; +extern unsigned short D_8017E162; +extern unsigned short D_8017E166; +extern unsigned short D_8017E16A; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017E15E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017E162; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017E166; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017E16A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017E6F4[])(void); + +void func_80141788(void) +{ + D_8017E6F4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017E700[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017E700[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017E678; +extern s16 D_8017E67A; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017E318; + extern u8 D_8017E330; + extern u8 D_8017E3A4; + extern u8 D_8017E3AC; + extern void *D_801953E0; + extern void *D_801953E4; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801953E0 = &D_8017E318; + D_801953E4 = &D_8017E3A4; + } else { + D_801953E0 = &D_8017E330; + D_801953E4 = &D_8017E3AC; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017E678 = 0xE; + D_8017E67A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017E67C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017E67C; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017E67C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017E654; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017E654 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017E724[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017E724[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017E734[])(void); + +void func_801425CC(void *a0) { + D_8017E734[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017E718; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017E718); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017E748[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017E748[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017E764[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017E764[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017E934[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017E934[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017E9EC[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017E9EC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_80194AC8; +extern u8 D_801953E8; +extern u8 D_801953E9; +extern u8 D_801953EA; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_80194AC8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801953E8 = mul * (local.b[0] >> 4); + D_801953E9 = mul * (local.b[1] >> 4); + D_801953EA = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017E73C; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017E73C); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017E758[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017E758); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017E924[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017E924[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017E944[]; +extern unsigned char D_8017E9A4[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017E944); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017E9A4); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_80194AC4; +extern u8 D_801953E8; +extern u8 D_801953EC; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_80194AC4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801953E8); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801953E8, 0x10); + memcpy(&D_801953EC, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017EAFC[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017EAFC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017EC24[])(void); + +void func_80143B30(void *a0) { + D_8017EC24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017EC30[])(void); + +void func_80143C38(void *a0) { + D_8017EC30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017EC38[])(void); + +void func_80143C98(void *a0) { + D_8017EC38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80143D28); + + +extern void (*D_8017EC80[])(void); + +void func_80143E68(void *a0) { + D_8017EC80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017EC94[])(void); + +void func_80144054(void *a0) { + D_8017EC94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017EC9C[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017EC9C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017EC18; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017EC18, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017EC2C; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017EC2C * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017EC2C * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017EC40; +extern u8 D_8017EC4C; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017EC40); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017EC4C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017EC18; +extern u8 D_8017EC88; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017EC18, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017EC88, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017ECA4[])(void); + +void func_801449C8(void *a0) { + D_8017ECA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017ECAC[])(void); + +void func_80144A2C(void *a0) { + D_8017ECAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c b/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c index f8afa1300..47941ee2d 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c @@ -1089,1167 +1089,3 @@ s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2) { INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - -extern u8 *D_8017EDFC; -extern u8 *D_8017EE00; -extern u8 *D_8017EE04; -extern u8 *D_8017EE08; -extern u8 *D_8017EE0C; -extern u16 *D_8017EE10[]; -extern u16 *D_8017EE18[]; -extern u16 *D_8017EE38[]; - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017EDFC; - iVar2 = func_80028D58(); - puVar3 = D_8017EE10[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017EE00; - iVar2 = func_80028DE0(); - puVar3 = D_8017EE10[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017EE04 + 0x18) = *D_8017EE18[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017EE08 + 0x18) = *D_8017EE18[iVar2]; - - puVar1 = D_8017EE0C; - iVar2 = func_80028D9C(); - puVar3 = D_8017EE38[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - -extern unsigned char D_80078E7F; -extern unsigned char D_80078E7E; -extern unsigned char D_80078E7D; -extern M2C_UNK D_8017ED38; - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017ED38); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - -extern short D_80115128; -extern u8 D_8017ED48; -extern char *D_8017ED68; -extern char *D_8017ED6C; -extern char *D_8017ED70; -extern char *D_8017ED74; -extern char *D_8017ED78; - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017ED48); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017ED68; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ED6C; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ED70; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ED74; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017ED78; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - -// @class: other -// @stuck: none — MATCH - -extern short D_80115128; -extern unsigned short D_80115172; -extern unsigned short D_8017EC02; -extern unsigned short D_8017EC06; -extern unsigned short D_8017EC0A; -extern unsigned short D_8017EC0E; - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017EC02; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EC06; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EC0A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017EC0E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ - - -extern unsigned short D_80115112; -extern void (*D_8017F198[])(void); - -void func_80141788(void) -{ - D_8017F198[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - -extern u16 D_8011511E; -extern unsigned short D_80115112; - -void func_80141874(void) { - - extern u16 D_8011511C; - extern u16 D_80115116; - extern void (*D_8017F1A4[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017F1A4[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern s32 D_80115130; -extern s16 D_8017F11C; -extern s16 D_8017F11E; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011512E; - extern u8 D_80115158[]; - extern s16 D_8011515A; - extern u8 D_8011515C; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017EDBC; - extern u8 D_8017EDD4; - extern u8 D_8017EE48; - extern u8 D_8017EE50; - extern void *D_801A2A70; - extern void *D_801A2A74; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A2A70 = &D_8017EDBC; - D_801A2A74 = &D_8017EE48; - } else { - D_801A2A70 = &D_8017EDD4; - D_801A2A74 = &D_8017EE50; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F11C = 0xE; - D_8017F11E = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F120: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern s32 D_80115130; -extern u8 D_8017F120; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8011515C; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F120); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80141B90); - -DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern u16 D_80115110; -extern u8 D_8017F0F8; -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - func_8002D4C8(*(u16 *)(&D_8017F0F8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017F1C8[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017F1C8[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - -extern void (*D_8017F1D8[])(void); - -void func_801425CC(void *a0) { - D_8017F1D8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); -extern s32 D_8017F1BC; - -void func_80142608(s32 param_1) -{ - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017F1BC); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - -DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ - -DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F1EC[])(); - -void func_801427EC(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F1EC[*(u16 *)(param_1 + 2)](); - } -} - - -DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F208[])(); - -void func_8014292C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F208[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F3D8[])(); - -void func_80142978(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F3D8[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8017F490[])(); - -void func_801429C4(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8017F490[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - -extern u16 D_800B99D8; -extern struct packed_word D_801A2154; -extern u8 D_801A2A78; -extern u8 D_801A2A79; -extern u8 D_801A2A7A; - -void func_80142A80(void) -{ - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A2154; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A2A78 = mul * (local.b[0] >> 4); - D_801A2A79 = mul * (local.b[1] >> 4); - D_801A2A7A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80142B2C); - -DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ - -DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern int D_8017F1E0; - -void func_80142DC4(int param_1) -{ - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F1E0); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F1FC[]; - -void func_80142E38(int param_1) -{ - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F1FC); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017F3C8[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017F3C8[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - -extern unsigned char D_8017F3E8[]; -extern unsigned char D_8017F448[]; - -void func_8014305C(int param_1) -{ - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F3E8); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017F448); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - -extern u8 D_801A2150; -extern u8 D_801A2A78; -extern u8 D_801A2A7C; - -void func_801431E8(s32 param_1) { - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A2150, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A2A78); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A2A78, 0x10); - memcpy(&D_801A2A7C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - -DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - -extern u8 D_800D387C[]; -extern u32 D_8017F5A0[]; - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017F5A0[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_8014358C); - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ - - -extern void (*D_8017F6C8[])(void); - -void func_80143B30(void *a0) { - D_8017F6C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ - - -extern void (*D_8017F6D4[])(void); - -void func_80143C38(void *a0) { - D_8017F6D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ - - -extern void (*D_8017F6DC[])(void); - -void func_80143C98(void *a0) { - D_8017F6DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80143D28); - - -extern void (*D_8017F724[])(void); - -void func_80143E68(void *a0) { - D_8017F724[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ - -DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ - -DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ - - -extern void (*D_8017F738[])(void); - -void func_80144054(void *a0) { - D_8017F738[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - -extern void (*D_8017F740[])(); - -void func_801442F8(int param_1) -{ - int iVar1; - - D_8017F740[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern u8 D_8017F6BC; - -void func_80144364(int param_1) { - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017F6BC, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(void *a0, void *a1); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 D_8017F6D0; - -void func_80144458(void *arg0) { - s32 temp_s0; - void *temp_s2; - void *temp_v0; - - temp_s2 = M2C_FIELD(arg0, void **, 0xCC); - if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { - temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); - if (temp_v0 != NULL) { - temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; - M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F6D0 * 0x10); - M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F6D0 * 0x10); - func_8012AD80(arg0); - } - } - M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); - M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); - M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); - if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { - func_80016714(temp_s2, 0x38); - func_8012C218(arg0); - } -} - - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - -DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_8017F6E4; -extern u8 D_8017F6F0; - -void func_8014477C(void *param_1) { - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F6E4); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F6F0); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -extern u8 D_8017F6BC; -extern u8 D_8017F72C; - -void func_80144880(s32 param_1) -{ - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017F6BC, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_8017F72C, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - -extern void (*D_8017F748[])(void); - -void func_801449C8(void *a0) { - D_8017F748[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ - - -extern void (*D_8017F750[])(void); - -void func_80144A2C(void *a0) { - D_8017F750[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ - -DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8013FFD8", func_80144B14); - diff --git a/src/ov_SC07_009/ov_SC07_009_jr_80140608.c b/src/ov_SC07_009/ov_SC07_009_jr_80140608.c new file mode 100644 index 000000000..54b101497 --- /dev/null +++ b/src/ov_SC07_009/ov_SC07_009_jr_80140608.c @@ -0,0 +1,2207 @@ +#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 { int a; short cmd; short b; } Elem_8012ACE0_8012ACE0; /* 8-byte element, cmd @ +4 */ +typedef struct { char pad[0x90]; Elem_8012ACE0_8012ACE0 *list; } Owner_8012ACE0_8012ACE0; /* list ptr @ +0x90 */ +struct S8012D664_8012D664 { short a, b, c; }; +typedef struct Entry_8012DDA4 { + u16 active; + unsigned char pad[0x10C - 2]; +} Entry_8012DDA4; +typedef struct { char _b[8]; } M8_801312D0; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { + u16 f0; /* 0x0 */ + u16 f2; /* 0x2 */ + u16 f4; /* 0x4 */ + s16 f6; /* 0x6 */ +} Foo_80134510_80134510; +typedef struct { + /* 0x00 */ u16 f0; + /* 0x02 */ s16 f2; + /* 0x04 */ s16 f4; + /* 0x06 */ s16 f6; + /* 0x08 */ s16 f8; + /* 0x0A */ s16 fa; + /* 0x0C */ s16 fc; + /* 0x0E */ s16 fe; + /* 0x10 */ s16 f10; + /* 0x12 */ s16 f12; + /* 0x14 */ s16 f14; +} S0_801347A0; +typedef struct { + /* 0x0 */ s16 f0; + /* 0x2 */ s16 f2; + /* 0x4 */ s16 f4; + /* 0x6 */ s16 f6; +} Elem_801347A0; +typedef struct { + /* 0x0 */ u16 f0; + /* 0x2 */ u16 f2; + /* 0x4 */ u16 f4; + /* 0x6 */ u16 f6; +} SVec_801347A0; +typedef struct { char s[10]; } S10_80136C90; +typedef struct { s16 x, y; } Pair_8013AD38; +typedef struct { u32 addr : 24; u32 len : 8; u8 r0, g0, b0, code; } P_TAG_8013DD68; +typedef struct { u32 w[23]; } DrawEnv_8013DD68; /* 0x5C copy unit, align 4 */ +typedef struct { DrawEnv_8013DD68 env; u8 pad[0x0C]; } Buf_8013DD68; /* -> frame 0xA0 (gcc adds 0x10 for the struct-copy) */ +typedef struct { s32 f0; } E4; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 D_801A17C4; +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern u16 D_800B99F6; +extern void (*D_8017E03C[])(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern s32 D_801A292C; +extern void func_80029444(void); +extern void func_800D1754(void); +extern s32 D_80126B58; +extern s32 D_801A3D68; +extern u16 D_800B99DA; +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern void func_801508B4(void *a0); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern void func_8016E95C(void); +extern void func_801754A8(void); +extern void func_8013BC7C(void); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern u8 D_800AEFD0; +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AF558; +extern int D_801A17C4; +extern int func_801288E8(int arg0); +extern u8 D_800AF560; +extern s32 func_80128940(s32 _arg0); +extern int D_800AECB0; +extern u8 D_800AECB8; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s16 D_800B9A00; +extern M2C_UNK (*D_8017DD78)(); +extern s16 (*D_8017DD7C)(); +extern M2C_UNK (*D_8017DD84)(); +extern s32 (*D_8017DD88)(); +extern s32 D_801A2928; +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A17C8; +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern u8 D_80127504; +extern s32 D_80126E60[]; +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s8 D_801150D6; +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern s8 D_801152C0; +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 D_801151D4; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern void func_8012A4BC(void); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern s32 ratan2(s32 a0, s32 a1); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern M2C_UNK D_8017E0D0; +extern void func_8012ACA0(void *arg0); +extern s32 func_8012ACE0(void *o); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern void func_8012C218(void *a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C820(u8 *a0); +extern s32 D_801815B4; +extern s16 D_801270C4; +extern u16 D_801274E4[]; +extern s32 D_8011DB08; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern int func_8012D664(int arg0, int arg1, int arg2); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern M2C_UNK D_8017E0E8; +extern M2C_UNK D_8017E0F0; +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern void func_8016B428(int); +extern void func_80019064(void *); +extern int D_8017E0F8; +extern void func_8012E9C0(int param_1); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern unsigned char D_8017E114[]; +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern u8 D_8017E120[]; +extern void func_8012F8C8(u8* arg0); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern s32 func_8012FCC4(s32 param_1); +extern void func_8012FDA8(int param_1); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void (*D_8017E134[])(void); +extern void func_80130D0C(void *a0); +extern s32 rand(void); +extern u8 D_80078E78[]; +extern u16 D_80078EB2; +extern u16 D_80078EB4; +extern s16 D_8017E184[]; +extern s16 D_8017E1B4[]; +extern s16 D_8017E214[]; +extern s16 D_8017E21C[]; +extern s16 D_8017E23C[]; +extern void func_80130D48(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern void (*D_8017E274[])(struct S80131E00 *a0); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void (*D_8017E2CC[])(void); +extern void func_80131EEC(void *a0); +extern void (*D_8017E314[])(void); +extern void func_80131F28(void *a0); +extern void (*D_8017E31C[])(void); +extern void func_80131F64(void *a0); +extern void (*D_8017E324[])(void); +extern void func_80131FA0(void *a0); +extern void (*D_8017E32C[])(void); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern int D_8017E2D4; +extern void func_801320D8(int param_1); +extern s32 func_80132144(s32 param_1); +extern int D_8017E2F4; +extern void func_801321B0(int param_1); +extern int D_8017E304; +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern s32 D_801A2998; +extern s32 D_801A299C[]; +extern int D_801A29A0; +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern s32 func_80135004(s32 arg0, s32 p1, s32 p2); +extern u8 D_8017E338; +extern u8 D_8017E334; +extern s16 *D_8017E33C; +extern u8 D_8017E340; +extern int D_801A2998; +extern u16 D_801A29A8; +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s16 *D_8017E33C; /* holds a pointer value (*(u16**)&D_8017E33C) */ +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void (*D_8017E350[])(void); +extern void func_80136C54(void); +extern s32 func_80136C90(); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern int D_8017E3A4; +extern int D_801269F0; +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern void func_80137BD8(s32 a0); +extern unsigned char D_80126A0E; +extern short D_80126A0A; +extern s16 D_801269F4; +extern int D_800A5E60; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void (*D_8017E3A8[])(void); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern u8 D_8017E3EC; +extern u8 D_8017E430; +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_80138C30(void *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_8013A380(void); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 D_800D45F4[]; /* src0 (flat: [2*i]=x, [2*i+1]=y) */ +extern u8 D_8017E474[]; /* sign table, alt (when a1 < 0xC00) */ +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern s16 D_8017E4EC, D_8017E4EE, D_8017E4F0, D_8017E4F2, D_8017E4F4, D_8017E4F6; +extern u16 D_800D45F6; +extern s32 func_8016EC0C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012B4B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); /* derive-decl, arity 4 */ +extern s32 func_80169A4C(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8016A8FC(s32 a0); /* match-first, arity 1 */ +extern s32 func_8012B8E4(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8015E1B8(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015EE08(s32 a0); /* match-first, arity 1 */ +extern s32 func_8015F7D4(s32 a0); /* match-first, arity 1 */ +extern s32 func_80160B34(s32 a0); /* match-first, arity 1 */ +extern s32 func_80165140(s32 a0); /* match-first, arity 1 */ +extern s32 func_80161CD0(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_80175268(s32 a0); /* match-first, arity 1 */ +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern s32 func_801809BC(s32 a0, s32 a1); /* match-first, arity 2 */ +extern s32 func_8012DE2C(s32 a0); /* derive-decl, arity 1 */ +extern s32 func_8012DDA4(void); /* derive-decl, arity 0 */ +extern s32 func_801759D8(void); /* derive-decl, arity 0 */ +extern s32 func_80175820(void); /* derive-decl, arity 0 */ +extern s32 func_801758FC(void); /* derive-decl, arity 0 */ +extern s32 D_801A2A10; +extern s32 D_801269D4; +extern s32 D_801269C8; +extern M2C_UNK D_80062BC0; +extern s8 D_801A2A14; +extern s8 D_801A2A15; +extern void func_8013C9C4(void * arg0); +extern s32 D_801A2A34; +extern s32 D_801A2A28; +extern s32 D_801A2A2C; +extern s32 D_801A2A38; +extern void func_8013CABC(void); +extern s32 D_801A2A30; +extern void func_8013CAE8(void); +extern s32 D_801A2A60; +extern s32 D_801A2A64; +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern s32 D_801A2A40; +extern s32 D_801A2A44; +extern void func_8013D9B0(void); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern u8 D_801A3D62; +extern u8 D_801A3DD6; +extern u8 D_801A3C8A; +extern u8 D_801A3D44; +extern u8 D_801A3C68; +extern u8 D_801A3C89; +extern s32 D_801A3D48; +extern void func_8013D330(void); +extern void *D_801A2A18; +extern void *D_801A2A1C; +extern void *D_801A2A20; +extern s32 D_801A2A48; +extern s32 D_801A2A4C; +extern s32 D_801A2A50; +extern s32 D_801A3CBC[]; +extern u8 D_8017E5E4[]; +extern u8 D_8017E68C[]; +extern u8 D_8017E53C[]; +extern u8 D_8017E638[]; +extern u8 D_8017E6B8[]; +extern u8 D_8017E590[]; +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern s16 *D_801A2A24; +extern s32 D_801A2A54; +extern s32 D_801A2A58; +extern s32 D_801A2A5C; +extern void func_8013DBE4(int param_1); +extern void func_8013DD68(); +extern s32 D_801A2A3C; +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_8012C750(void *a0); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_8013E5E8(void); +extern u8 D_80078EC0; +extern u16 D_8011511A; +extern u16 D_80115124; +extern u8 D_80115148[]; +extern u8 D_80115140[]; +extern s32 D_8017F144; +extern s32 D_80115188; +extern s16 D_8017F11C; +extern s16 D_8017F11E; +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern short D_80115128; +extern s16 D_8011512A; +extern unsigned char D_8017F120; +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern unsigned short D_80115118; +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + +extern u8 *D_8017EDFC; +extern u8 *D_8017EE00; +extern u8 *D_8017EE04; +extern u8 *D_8017EE08; +extern u8 *D_8017EE0C; +extern u16 *D_8017EE10[]; +extern u16 *D_8017EE18[]; +extern u16 *D_8017EE38[]; + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017EDFC; + iVar2 = func_80028D58(); + puVar3 = D_8017EE10[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017EE00; + iVar2 = func_80028DE0(); + puVar3 = D_8017EE10[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017EE04 + 0x18) = *D_8017EE18[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017EE08 + 0x18) = *D_8017EE18[iVar2]; + + puVar1 = D_8017EE0C; + iVar2 = func_80028D9C(); + puVar3 = D_8017EE38[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + +extern unsigned char D_80078E7F; +extern unsigned char D_80078E7E; +extern unsigned char D_80078E7D; +extern M2C_UNK D_8017ED38; + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017ED38); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + +extern short D_80115128; +extern u8 D_8017ED48; +extern char *D_8017ED68; +extern char *D_8017ED6C; +extern char *D_8017ED70; +extern char *D_8017ED74; +extern char *D_8017ED78; + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017ED48); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017ED68; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ED6C; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ED70; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ED74; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017ED78; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + +// @class: other +// @stuck: none — MATCH + +extern short D_80115128; +extern unsigned short D_80115172; +extern unsigned short D_8017EC02; +extern unsigned short D_8017EC06; +extern unsigned short D_8017EC0A; +extern unsigned short D_8017EC0E; + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017EC02; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EC06; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EC0A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017EC0E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415C0 (src/shared) */ + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168C (src/shared) */ + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416D4 (src/shared) */ + + +extern unsigned short D_80115112; +extern void (*D_8017F198[])(void); + +void func_80141788(void) +{ + D_8017F198[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417C4 (src/shared) */ + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417F8 (src/shared) */ + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + +extern u16 D_8011511E; +extern unsigned short D_80115112; + +void func_80141874(void) { + + extern u16 D_8011511C; + extern u16 D_80115116; + extern void (*D_8017F1A4[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017F1A4[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern s32 D_80115130; +extern s16 D_8017F11C; +extern s16 D_8017F11E; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011512E; + extern u8 D_80115158[]; + extern s16 D_8011515A; + extern u8 D_8011515C; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017EDBC; + extern u8 D_8017EDD4; + extern u8 D_8017EE48; + extern u8 D_8017EE50; + extern void *D_801A2A70; + extern void *D_801A2A74; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A2A70 = &D_8017EDBC; + D_801A2A74 = &D_8017EE48; + } else { + D_801A2A70 = &D_8017EDD4; + D_801A2A74 = &D_8017EE50; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F11C = 0xE; + D_8017F11E = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F120: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern s32 D_80115130; +extern u8 D_8017F120; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8011515C; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F120); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80141B90); + +DEFINE_func_80141C04() /* dedup: shared engine-core @0x80141C04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern u16 D_80115110; +extern u8 D_8017F0F8; +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + func_8002D4C8(*(u16 *)(&D_8017F0F8 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141C50 (src/shared) */ + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141CA4 (src/shared) */ + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017F1C8[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017F1C8[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + +extern void (*D_8017F1D8[])(void); + +void func_801425CC(void *a0) { + D_8017F1D8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); +extern s32 D_8017F1BC; + +void func_80142608(s32 param_1) +{ + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017F1BC); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426D4 (src/shared) */ + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + +DEFINE_func_801427DC() /* dedup: shared engine-core @0x801427DC (src/shared) */ + +DEFINE_func_801427E4() /* dedup: shared engine-core @0x801427E4 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F1EC[])(); + +void func_801427EC(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F1EC[*(u16 *)(param_1 + 2)](); + } +} + + +DEFINE_func_80142838() /* dedup: shared engine-core @0x80142838 (src/shared) */ + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428CC (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F208[])(); + +void func_8014292C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F208[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F3D8[])(); + +void func_80142978(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F3D8[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8017F490[])(); + +void func_801429C4(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8017F490[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + +extern u16 D_800B99D8; +extern struct packed_word D_801A2154; +extern u8 D_801A2A78; +extern u8 D_801A2A79; +extern u8 D_801A2A7A; + +void func_80142A80(void) +{ + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A2154; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A2A78 = mul * (local.b[0] >> 4); + D_801A2A79 = mul * (local.b[1] >> 4); + D_801A2A7A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80142B2C); + +DEFINE_func_80142BB4() /* dedup: shared engine-core @0x80142BB4 (src/shared) */ + +DEFINE_func_80142C7C() /* dedup: shared engine-core @0x80142C7C (src/shared) */ + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142C84 (src/shared) */ + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142C9C (src/shared) */ + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */ + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern int D_8017F1E0; + +void func_80142DC4(int param_1) +{ + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017F1E0); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F1FC[]; + +void func_80142E38(int param_1) +{ + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017F1FC); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017F3C8[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017F3C8[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +DEFINE_func_80142F68() /* dedup: shared engine-core @0x80142F68 (src/shared) */ + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142FFC (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + +extern unsigned char D_8017F3E8[]; +extern unsigned char D_8017F448[]; + +void func_8014305C(int param_1) +{ + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017F3E8); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017F448); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +DEFINE_func_801430F4() /* dedup: shared engine-core @0x801430F4 (src/shared) */ + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + +extern u8 D_801A2150; +extern u8 D_801A2A78; +extern u8 D_801A2A7C; + +void func_801431E8(s32 param_1) { + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A2150, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A2A78); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A2A78, 0x10); + memcpy(&D_801A2A7C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432FC (src/shared) */ + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + +DEFINE_func_801433F0() /* dedup: shared engine-core @0x801433F0 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + +extern u8 D_800D387C[]; +extern u32 D_8017F5A0[]; + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017F5A0[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_8014350C() /* dedup: shared engine-core @0x8014350C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_8014358C); + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437D8 (src/shared) */ + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439C0 (src/shared) */ + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439FC (src/shared) */ + + +extern void (*D_8017F6C8[])(void); + +void func_80143B30(void *a0) { + D_8017F6C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143B6C (src/shared) */ + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143BDC (src/shared) */ + + +extern void (*D_8017F6D4[])(void); + +void func_80143C38(void *a0) { + D_8017F6D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143C74 (src/shared) */ + + +extern void (*D_8017F6DC[])(void); + +void func_80143C98(void *a0) { + D_8017F6DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143CD4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80143D28); + + +extern void (*D_8017F724[])(void); + +void func_80143E68(void *a0) { + D_8017F724[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143EA4() /* dedup: shared engine-core @0x80143EA4 (src/shared) */ + +DEFINE_func_80143EAC() /* dedup: shared engine-core @0x80143EAC (src/shared) */ + +DEFINE_func_80143EB4() /* dedup: shared engine-core @0x80143EB4 (src/shared) */ + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143EBC (src/shared) */ + + +extern void (*D_8017F738[])(void); + +void func_80144054(void *a0) { + D_8017F738[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + +extern void (*D_8017F740[])(); + +void func_801442F8(int param_1) +{ + int iVar1; + + D_8017F740[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8017F6BC; + +void func_80144364(int param_1) { + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017F6BC, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + + + +extern void func_80016714(void *a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_8012AD80(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_8017F6D0; + +void func_80144458(void *arg0) { + s32 temp_s0; + void *temp_s2; + void *temp_v0; + + temp_s2 = M2C_FIELD(arg0, void **, 0xCC); + if (M2C_FIELD(arg0, s16 *, 0x70) == 0) { + temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20); + if (temp_v0 != NULL) { + temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF; + M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8017F6D0 * 0x10); + M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8017F6D0 * 0x10); + func_8012AD80(arg0); + } + } + M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6); + M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA); + M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE); + if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) { + func_80016714(temp_s2, 0x38); + func_8012C218(arg0); + } +} + + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + +DEFINE_func_8014462C() /* dedup: shared engine-core @0x8014462C (src/shared) */ + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446A4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_8017F6E4; +extern u8 D_8017F6F0; + +void func_8014477C(void *param_1) { + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017F6E4); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017F6F0); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +extern u8 D_8017F6BC; +extern u8 D_8017F72C; + +void func_80144880(s32 param_1) +{ + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017F6BC, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_8017F72C, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + +extern void (*D_8017F748[])(void); + +void func_801449C8(void *a0) { + D_8017F748[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144A04 (src/shared) */ + + +extern void (*D_8017F750[])(void); + +void func_80144A2C(void *a0) { + D_8017F750[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144A68 (src/shared) */ + +DEFINE_func_80144A90() /* dedup: shared engine-core @0x80144A90 (src/shared) */ + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144A98 (src/shared) */ + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144AEC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80140608", func_80144B14); + + diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c b/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c index 9b9c44b8b..508bf173e 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c @@ -569,4025 +569,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - - extern u8 *D_80183018; - extern u8 *D_8018301C; - extern u8 *D_80183020; - extern u8 *D_80183024; - extern u8 *D_80183028; - extern u16 *D_8018302C[]; - extern u16 *D_80183034[]; - extern u16 *D_80183054[]; - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_80183018; - iVar2 = func_80028D58(); - puVar3 = D_8018302C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8018301C; - iVar2 = func_80028DE0(); - puVar3 = D_8018302C[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_80183020 + 0x18) = *D_80183034[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_80183024 + 0x18) = *D_80183034[iVar2]; - - puVar1 = D_80183028; - iVar2 = func_80028D9C(); - puVar3 = D_80183054[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - - extern unsigned char D_80078E7F; - extern unsigned char D_80078E7E; - extern unsigned char D_80078E7D; - extern M2C_UNK D_80182F54; - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_80182F54); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - - extern short D_80115128; - extern u8 D_80182F64; - extern char *D_80182F84; - extern char *D_80182F88; - extern char *D_80182F8C; - extern char *D_80182F90; - extern char *D_80182F94; - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_80182F64); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_80182F84; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182F88; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182F8C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182F90; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_80182F94; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - - -// @class: other -// @stuck: none — MATCH - - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - - extern short D_80115128; - extern unsigned short D_80115172; - extern unsigned short D_80182E1E; - extern unsigned short D_80182E22; - extern unsigned short D_80182E26; - extern unsigned short D_80182E2A; - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_80182E1E; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_80182E22; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182E26; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_80182E2A; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ - - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ - - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ - - - - -void func_80141788(void) -{ - - extern unsigned short D_80115112; - extern void (*D_801833B4[])(void); - D_801833B4[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ - - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ - - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - - -void func_80141874(void) { - - extern u16 D_8011511E; - extern u16 D_8011511C; - extern unsigned short D_80115112; - extern u16 D_80115116; - extern void (*D_801833C0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_801833C0[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern u8 D_80115158[]; -extern u8 D_8011515C; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern u16 D_80115112; - extern unsigned short D_80115118; - extern s32 D_80115130; - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_80182FD8; - extern u8 D_80182FF0; - extern u8 D_80183064; - extern u8 D_8018306C; - extern s16 D_80183338; - extern s16 D_8018333A; - extern void *D_801A6B00; - extern void *D_801A6B04; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_801A6B00 = &D_80182FD8; - D_801A6B04 = &D_80183064; - } else { - D_801A6B00 = &D_80182FF0; - D_801A6B04 = &D_8018306C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_80183338 = 0xE; - D_8018333A = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8018333C: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern s16 D_800B9A02; - extern u8 D_801151C8[]; - extern s32 D_801151D0; - extern u8 D_8011514D; - extern s32 D_80115130; - extern u8 D_8018333C; - extern u16 D_80115116; - extern u16 D_80115112; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8018333C); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80141B90); - -void func_80141C04(void) { -} - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - - extern u16 D_80115110; - extern u8 D_80183314; - func_8002D4C8(*(u16 *)(&D_80183314 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ - - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ - - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_801833E4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_801833E4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - - -void func_801425CC(void *a0) { - - extern void (*D_801833F4[])(void); - D_801833F4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); - -void func_80142608(s32 param_1) -{ - - extern s32 D_801833D8; - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_801833D8); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ - - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - - -void func_801427DC(void) { -} - -void func_801427E4(void) { -} - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801427EC(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_80183408[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_80183408[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80142838); - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_8014292C(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_80183424[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_80183424[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_80142978(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_801835F4[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_801835F4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801429C4(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_801836AC[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_801836AC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - - -void func_80142A80(void) -{ - - extern u16 D_800B99D8; - extern struct packed_word D_801A61B8; - extern u8 D_801A6B08; - extern u8 D_801A6B09; - extern u8 D_801A6B0A; - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_801A61B8; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_801A6B08 = mul * (local.b[0] >> 4); - D_801A6B09 = mul * (local.b[1] >> 4); - D_801A6B0A = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80142B2C); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80142BB4); - -void func_80142C7C(void) { -} - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ - - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ - - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ - - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142DC4(int param_1) -{ - - extern int D_801833FC; - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801833FC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142E38(int param_1) -{ - - extern unsigned char D_80183418[]; - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183418); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_801835E4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_801835E4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80142F68); - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_8014305C(int param_1) -{ - - extern unsigned char D_80183604[]; - extern unsigned char D_80183664[]; - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183604); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_80183664); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801430F4); - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - - -void func_801431E8(s32 param_1) { - - extern u8 D_801A61B4; - extern u8 D_801A6B08; - extern u8 D_801A6B0C; - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_801A61B4, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_801A6B08); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_801A6B08, 0x10); - memcpy(&D_801A6B0C, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ - - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801433F0); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - - extern u8 D_800D387C[]; - extern u32 D_801837BC[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801837BC[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014350C); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_8014358C(s32 param_1) -{ - - extern u8 D_801837CC[]; - extern u32 D_801838C8[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_801837CC; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_801838C8[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ - - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ - - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ - - - - -void func_80143B30(void *a0) { - - extern void (*D_801838E4[])(void); - D_801838E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ - - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ - - - - -void func_80143C38(void *a0) { - - extern void (*D_801838F0[])(void); - D_801838F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ - - - - -void func_80143C98(void *a0) { - - extern void (*D_801838F8[])(void); - D_801838F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (80 ins, relocation-masked). iVar2/iVar3 pinned $s1/$s2; sVar4 is an -// int set BEFORE the call so it naturally takes callee-saved $s3; chained assignment -// a=b=c=sVar4 materializes the value once (the addu $v0,$s3,$zero move) + delay-slot store. - - /* size 0x0c */ - -extern void ApplyMatrixSV(void *a0, void *a1, void *a2); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -void func_80143D28(s32 param_1) { - - extern MatEntry D_8018391C[]; - register s32 iVar3 __asm__("$18") = *(s32 *)(param_1 + 0x20); /* $s2 */ - register s32 iVar2 __asm__("$17") = *(s32 *)(param_1 + 0x64); /* $s1 */ - MatEntry *p = &D_8018391C[*(s16 *)(param_1 + 0x70)]; - s32 sVar4; - s32 iVar1; - - *(s16 *)(iVar3 + 0x14) = p->f8; - *(u16 *)(iVar3 + 0x12) = *(u16 *)(iVar3 + 0x12) + p->fa; - sVar4 = 0x1000; - ApplyMatrixSV((void *)(*(s32 *)(param_1 + 0x20) + 0x34), p, (void *)(param_1 + 0x50)); - - if (*(s16 *)(param_1 + 0xfe) == 0 && - (iVar2 == 0 || *(s16 *)(iVar2 + 0x36) != *(s16 *)(param_1 + 0xfc) || - *(u8 *)(iVar2 + 0xc1) != 6)) { - if (0x10 < *(s32 *)(param_1 + 0x1c)) { - *(s32 *)(param_1 + 0x1c) = 0x10; - } - *(s16 *)(param_1 + 0xfe) = 1; - } - - iVar1 = *(s32 *)(param_1 + 0x1c); - if (iVar1 < 0x11) { - sVar4 = iVar1 << 8; - } - if (0x73 < iVar1) { - sVar4 = (0x78 - iVar1) << 10; - } - *(s16 *)(iVar3 + 0x18) = *(s16 *)(iVar3 + 0x1a) = *(s16 *)(iVar3 + 0x1c) = sVar4; - - if (func_8012BEE8(param_1)) { - func_8012C218((void *)param_1); - } -} - - - - -void func_80143E68(void *a0) { - - extern void (*D_80183940[])(void); - D_80183940[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80143EA4(void) { -} - -void func_80143EAC(void) { -} - -void func_80143EB4(void) { -} - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ - - - - -void func_80144054(void *a0) { - - extern void (*D_80183954[])(void); - D_80183954[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: 154/154 ins structural match (callees/consts/ctrl-flow/stack/GPU-packet all byte-correct); residual 25 = caller-saved temp-reg coalescing in the final ring-vertex block (target reuses dead $s0=iVar3 for iVar3-(iVar4>>6) subu where gcc reuses iVar4>>6's reg; iVar4 mflo -> $a3 vs target $v0) + 2-ins schedule swap of giv-increment vs iVar2*4 -> permuter grinder territory (§27 step-5) - - /* 0x14 stride */ - -extern void *func_80010A08(s32); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern s32 RotTransPers(s32, s32, s32 *, s32 *); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 AddPrim(s32, void *); - -void func_80144090(s32 param_1) { - - extern OtBlk D_800A651C[]; - extern u8 D_800AF648; - extern short D_800B9A02; - void *iVar1; - s32 iVar2; - s32 iVar3; - s32 iVar4; - s32 iVar5; - s32 iVar6; - struct { - s16 v10[4]; - u16 sxy[2]; - s32 p; - s32 flag; - } L; - - iVar1 = func_80010A08(0x140); - if (iVar1 != 0) { - *(s32 *)(param_1 + 4) = *(s32 *)(param_1 + 4) + *(s32 *)(param_1 + 0x10); - *(s32 *)(param_1 + 8) = *(s32 *)(param_1 + 8) + *(s32 *)(param_1 + 0x14); - *(s32 *)(param_1 + 0xc) = *(s32 *)(param_1 + 0xc) + *(s32 *)(param_1 + 0x18); - L.v10[0] = *(u16 *)(param_1 + 6); - L.v10[1] = *(u16 *)(param_1 + 0xa); - L.v10[2] = *(u16 *)(param_1 + 0xe); - func_8004914C(&D_800AF648); - func_800491AC(&D_800AF648); - iVar2 = RotTransPers((s32)L.v10, (s32)L.sxy, &L.p, &L.flag); - iVar2 = iVar2 + 4; - if (iVar2 < 0) { - iVar2 = 0; - } - iVar6 = 0; - do { - *(s32 *)((u8 *)iVar1 + 4) = 0xffffff; - *(u8 *)((u8 *)iVar1 + 3) = 4; - *(u8 *)((u8 *)iVar1 + 7) = 0x20; - if (*(s32 *)(param_1 + 0x1c) - 6 < 1) { - *(s16 *)((u8 *)iVar1 + 8) = L.sxy[0]; - *(s16 *)((u8 *)iVar1 + 0xa) = L.sxy[1]; - } else { - iVar5 = func_8004787C(iVar6); - *(s16 *)((u8 *)iVar1 + 8) = L.sxy[0] + ((iVar5 * ((*(s32 *)(param_1 + 0x1c) - 6) << 4)) >> 0xc); - iVar5 = func_80047948(iVar6); - *(s16 *)((u8 *)iVar1 + 0xa) = L.sxy[1] + ((iVar5 * ((*(s32 *)(param_1 + 0x1c) - 6) << 4)) >> 0xc); - } - iVar3 = func_8004787C(iVar6) * (*(s32 *)(param_1 + 0x1c) << 4); - iVar4 = func_80047948(iVar6) * (*(s32 *)(param_1 + 0x1c) << 4); - iVar6 = iVar6 + 0x100; - *(s16 *)((u8 *)iVar1 + 0x10) = L.sxy[0] + ((iVar3 + (iVar4 >> 6)) >> 0xc); - *(s16 *)((u8 *)iVar1 + 0x12) = L.sxy[1] + ((iVar4 + (iVar3 >> 6)) >> 0xc); - *(s16 *)((u8 *)iVar1 + 0xc) = L.sxy[0] + ((iVar3 - (iVar4 >> 6)) >> 0xc); - *(s16 *)((u8 *)iVar1 + 0xe) = L.sxy[1] + ((iVar4 - (iVar3 >> 6)) >> 0xc); - AddPrim(D_800A651C[(u16)D_800B9A02].a + (iVar2 * 4), iVar1); - iVar1 = (u8 *)iVar1 + 0x14; - } while (iVar6 < 0x1000); - } -} - - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - - -void func_801442F8(int param_1) -{ - - extern void (*D_8018395C[])(); - int iVar1; - - D_8018395C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -void func_80144364(int param_1) { - - extern u8 D_801838D8; - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_801838D8, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80144458); - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014462C); - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); - -void func_8014477C(void *param_1) { - - extern u8 D_80183900; - extern u8 D_8018390C; - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183900); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018390C); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - - -void func_80144880(s32 param_1) -{ - - extern u8 D_801838D8; - extern u8 D_80183948; - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_801838D8, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80183948, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - - - -void func_801449C8(void *a0) { - - extern void (*D_80183964[])(void); - D_80183964[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ - - - - -void func_80144A2C(void *a0) { - - extern void (*D_8018396C[])(void); - D_8018396C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ - - -void func_80144A90(void) { -} - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ - - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80144B14); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80144B9C); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801457A4); - -void func_801458E0(void) { -} - -DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801844F8 block defeats the tail-merge of the two identical D_801844F8 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145934(void) { - - extern u8 D_801844F8; - extern u8 D_80184468; - extern u8 D_80184444; - extern u8 D_80184420; - extern u8 D_801844D4; - extern u8 D_801844B0; - extern u8 D_8018448C; - extern u8 D_801843FC; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_801844F8; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801844F8 load from being - * tail-merged with the v>=0x384 D_801844F8 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_80184468; - } else if (v >= 0x578) { - p = &D_80184444; - } else if (v >= 0x514) { - p = &D_80184420; - } else if (v >= 0x384) { - p = &D_801844F8; - } else if (v >= 0x258) { - p = &D_801844D4; - } else if (v >= 0xC8) { - p = &D_801844B0; - } else if (v >= 0xA) { - p = &D_8018448C; - } else { - p = &D_801843FC; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80184588 block defeats the tail-merge of the two identical D_80184588 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145A2C(void) { - - extern u8 D_80184588; - extern u8 D_80184468; - extern u8 D_80184444; - extern u8 D_80184420; - extern u8 D_80184564; - extern u8 D_80184540; - extern u8 D_8018451C; - extern u8 D_801843FC; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_80184588; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80184588 load from being - * tail-merged with the v>=0x384 D_80184588 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_80184468; - } else if (v >= 0x578) { - p = &D_80184444; - } else if (v >= 0x514) { - p = &D_80184420; - } else if (v >= 0x384) { - p = &D_80184588; - } else if (v >= 0x258) { - p = &D_80184564; - } else if (v >= 0xC8) { - p = &D_80184540; - } else if (v >= 0xA) { - p = &D_8018451C; - } else { - p = &D_801843FC; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - -DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ - - -DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ - - -DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80145CEC); - - - -// @class: schedule -// @stuck: branch layout — 3-way dispatch on param_1; trying switch form - -extern s32 func_80029178(s32 arg); -extern void func_80146014(s32 a0); - - -void func_80145EE8(s32 param_1) -{ - - extern unsigned char D_80183980[]; - extern unsigned char D_801839B0[]; - extern unsigned char D_80183A00[]; - extern unsigned char D_80183A30[]; - extern unsigned char D_80183A60[]; - switch (param_1) { - case 0: - if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { - ((void (*)(void *))func_80146014)(D_80183980); - } - if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { - ((void (*)(void *))func_80146014)(D_801839B0); - } - if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { - ((void (*)(void *))func_80146014)(D_80183A00); - } - if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { - ((void (*)(void *))func_80146014)(D_80183A30); - } - if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { - return; - } - ((void (*)(void *))func_80146014)(D_80183A60); - break; - case 1: - ((void (*)(void *))func_80146014)(D_80183980); - ((void (*)(void *))func_80146014)(D_801839B0); - ((void (*)(void *))func_80146014)(D_80183A00); - ((void (*)(void *))func_80146014)(D_80183A30); - ((void (*)(void *))func_80146014)(D_80183A60); - break; - } -} - - -DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ - - -void func_80146074(void) { -} - - -extern s32 func_80146128(void); -extern void func_80146360(void); -extern void func_801463A0(void); - -void func_8014607C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146128\n" - "lui $at, %%hi(D_801A6B48)\n" - "sw $v0, %%lo(D_801A6B48)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801A6B48)\n" - "lw $v0, %%lo(D_801A6B48)($v0)\n" - "nop\n" - "beqz $v0, .L80146114\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146360\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_801463A0\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - ".L80146114:\n" - "nop\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (fnptr-table idiom: D_80183AB0[u8 idx](&arg)) - -void func_80146360(void) -{ - - extern void (*D_80183AB0[])(void *); - extern u8 D_80126BA4; - extern s32 D_80126B58; - D_80183AB0[D_80126BA4](&D_80126B58); -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801463A0); - -DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ - - -DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ - - -DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ - - -DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ - - -DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ - - -DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ - - -DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ - - -DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801466F0); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80146750); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014680C); - -DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ - - -DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ - - -DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ - - -DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80146A6C); - -DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80146AFC); - -DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ - - -DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ - - -DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ - - -DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ - - -DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ - - -DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ - - -DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ - - -DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ - - -DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ - - -DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ - - -DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ - - -DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ - - -DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ - - -DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ - - -DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80146F58); - -DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ - - -DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ - - -DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ - - -DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ - - -DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ - - -DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ - - -DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ - - -DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ - - -DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ - - -DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ - - -DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ - - -DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ - - -DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ - - -DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ - - -DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ - - -DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ - - -DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ - - -DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ - - -DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ - - -DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ - - -DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ - - -DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80147364); - -DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ - - -DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ - - -DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ - - -DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ - - -DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ - - -DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ - - -DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ - - -DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ - - -DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ - - -DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ - - -DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ - - -DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ - - -DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ - - -DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ - - -DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ - - -DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ - - -DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ - - -DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ - - -DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ - - -DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ - - -DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ - - -DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ - - -DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ - - -DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ - - -DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ - - -DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ - - -DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ - - -DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ - - -DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ - - -DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ - - -DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ - - -DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ - - -DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ - - -DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ - - -DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ - - -DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801483E8); - -DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ - - -DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ - - -DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ - - -DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ - - -DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ - - -DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ - - -DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ - - -DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ - - -DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ - - -DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ - - -DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ - - -DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ - - -DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ - - -DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ - - -DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ - - -DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ - - -DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ - - -DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg - -extern s32 ratan2(s32 a0, s32 a1); - -int func_80148AFC(void *a0) { - - extern s32 D_801151D4; - extern ActorFn D_80183AB8[]; - s32 p = (s32)a0; - s32 iVar5 = *(s32 *)(p + 0x20); - register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 sVar3; - u8 bVar1; - __asm__("" : "=r"(tmp) : "0"(tmp)); - sVar3 = tmp; - bVar1 = *(u8 *)(p + 0xA9); - - switch (bVar1) { - case 0x41: - return D_80183AB8[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; - case 0x53: - case 0x73: - { - register u32 bb __asm__("$3"); - register s32 c80 __asm__("$2") = 0x80; - register s32 lo __asm__("$4"); - register s32 hi __asm__("$2"); - bb = *(u16 *)(p + 0xAE); - lo = bb & 0xFF; - if (lo != c80 || (hi = bb >> 8) != 0x80) { - s32 sVar4; - __asm__ __volatile__("" : : : "memory"); - sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); - *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; - return 1; - } - return 0; - } - } -} - - -DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ - - -DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ - - -DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ - - -DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ - - -DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ - - -DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ - - -DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ - - -DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ - - -DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ - - -DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ - - -DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ - - -DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ - - -DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ - - -DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ - - -DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ - - -DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (68 ins) -extern s32 ratan2(s32 a0, s32 a1); - -s32 func_80148D44(void) { - - extern s32 D_801151D4; - extern u8 D_80126C01; - extern u16 D_80126C02; - extern u16 D_80126C06; - extern s32 D_80183AF8[]; - register s32 ang __asm__("$16"); - register s32 a __asm__("$4"); - s32 p; - s32 res; - s32 d; - - p = D_801151D4; - a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), - *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; - d = (s32)D_80126C01; - __asm__ __volatile__("" : : "r"(a)); - ang = a; - if (d == 0x53) { - goto final; - } - if (d < 0x54) { - if (d == 0x41) { - goto call; - } - return 0x41; - } - if (d != 0x73) { - return 0x73; - } - goto final; -call: - return (s32)(s16)((s16 (*)())(D_80183AF8[D_80126C02 >> 0xc]))(); -final: - { - u32 e = D_80126C06; - if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { - return -1; - } - __asm__ __volatile__("" : : : "memory"); - res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; - } - return res; -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80148E54); - -DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ - - -DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ - - -DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ - - -DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ - - -DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ - - -DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ - - -DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ - - -DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ - - -DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ - - -DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ - - -DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ - - -DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ - - -DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ - - -DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ - - -DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ - - -DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ - - -DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ - - -DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ - - -DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ - - -DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ - - -DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ - - -DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ - - -DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ - - -DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ - - -DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ - - -DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ - - -DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ - - -DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ - - -DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ - - -DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ - - -DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ - - -DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ - - -DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ - - -extern void func_8012F14C(s32); -void func_80149350(s32 arg0) { - func_8012F14C(*(s32 *)(arg0 + 0x20) + 0x34); -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80149374); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801493D0); - -extern void func_8012F038(s32); -void func_8014942C(s32 arg0) { - func_8012F038(*(s32 *)(arg0 + 0x20) + 0x34); -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80149450); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801494CC); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80149544); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80149584); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801495C4); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014964C); - -DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ - - -DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ - - -DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ - - -DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ - - -DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801497A8); - -DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ - - -DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ - - -DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ - - -DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80149954); - -DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ - - -DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ - - -DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ - - -DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ - - -DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ - - -DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ - - -DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ - - -DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ - - -DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ - - -DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ - - -DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ - - -DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ - - -DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ - - -DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ - - -DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80149F2C); - -void func_80149FA8(void) { -} - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins) -extern s16 currentLocationId; - -s32 func_80149FB0(s32 a0) { - - extern s32 D_80183B78[]; - extern u8 D_80078E78[]; - s32 *p = &D_80183B78[0]; - register s32 v __asm__("$3") = *p; - u8 *q = &D_80078E78[0]; - s32 loc; - - if (v != 0) { - loc = currentLocationId; - p = p + 1; - do { - if (loc == v) { - goto ret0; - } - v = *p; - p = p + 1; - } while (v != 0); - } - - if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { - return 0; - } - if (*(s16 *)(a0 + 0x1C8) != 0) { - return 0; - } - if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { - ret0: - return 0; - } - v = q[0x48]; - q[0x48] = v ^ 0x80; - return 1; -} - - -extern u8 func_8014BEF8(void); -extern void func_8012F14C(s32); -extern s32 func_80135260(s32, s32, s32, s32); -extern void func_8014A1B0(s32 a0, s32 a1); -s32 func_8014A048(s32 param_1) { - - extern u8 D_801202A0[]; - Loc L; - s32 s0; - s32 s2; - u32 s3; - if ((*(u32 *)(param_1 + 0x44) & 0x400) != 0) { - return 0; - } - if ((*(u16 *)(param_1 + 0xAC) & 0x80) == 0) { - if ((*(u16 *)(param_1 + 0xAC) & 0x10) == 0) { - return 0; - } - if (((s32 (*)(s32))func_8014BEF8)(param_1) == 0) { - goto ret0; - } - } - L.a30 = *(s16 *)(param_1 + 6); - L.a2e = *(s16 *)(param_1 + 0xA); - L.a2c = *(s16 *)(param_1 + 0xE); - L.a1e = -0x10; - L.a20 = 0; - L.a1c = -0x20; - ((void (*)(s32, s32, s32))func_8012F14C)(*(s32 *)(param_1 + 0x20) + 0x34, (s32)&L.a20, (s32)L.buf); - s3 = 0; - s2 = 0; - while (1) { - s0 = (s32)D_801202A0 + s2; - __asm__ __volatile__("" : "=r"(s0) : "0"(s0)); - if ((*(u16 *)s0 != 0) && - (*(s32 *)(s0 + 0x58) != 0) && - (*(s16 *)(s0 + 0xAA) == 0) && - (*(s32 *)(param_1 + 0x184) != s0) && - ((*(u16 *)(s0 + 0x5C) & 0x200) != 0) && - (((s32 (*)(s32, s32, s32, s32))func_80135260)(*(s32 *)(s0 + 0x20), *(s32 *)(s0 + 0x58), (s32)&L.a30, (s32)L.buf) != 0)) { - break; - } - s3++; - s2 += 0x10C; - if (s3 >= 0x60) { - return 0; - } - } - *(s32 *)(param_1 + 0x178) = s0; - func_8014A1B0(param_1, s0); - return 1; -ret0: - return 0; -} - - -DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ - - -DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ - - -DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ - - -DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ - - -DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ - - -DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ - - -DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ - - -DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ - - -DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014A51C); - -DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ - - -DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ - - -DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ - - -DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ - - -DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ - - -DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ - - -DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ - - -DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014A738); - -DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ - - -DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ - - -DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ - - -DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ - - -DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ - - -DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ - - -DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ - - -DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ - - -DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ - - -DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ - - -DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ - - -DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ - - -DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ - - -DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ - -DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ - - -DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ - - -DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ - - -DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ - - -DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ - - -DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ - - -DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ - - -DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ - - -DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ - - -DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ - - -DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ - - -DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ - - -DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ - - -DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ - - -DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ - - -DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ - - -DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ - - -DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ - - -DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ - - -DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ - - -DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ - - -DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ - - -DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ - - -DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ - - -DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ - - -DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ - - -DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ - - -DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ - - -DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ - - -DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ - - -DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ - - -DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ - - -DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ - - -DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ - - -DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ - - -DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ - - -DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ - - -void func_8014BDE0(void) { -} - -DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ - - -DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ - - -DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ - - -DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ - - -DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ - - -DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ - - -DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ - - -DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ - - -DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ - - -DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ - - -DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ - - -DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ - - -DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ - - -DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ - - -DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ - - -DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ - - -DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ - - -DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014C1A0); - -DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ - - -DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ - - -DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ - - -DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ - - -DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ - - -DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ - - -DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014C4AC); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014C568); - -DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ - - - -extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); - -s16 func_8014C5D0(s32 a0, s32 a1) { - - extern u8 D_80183C08; - return func_8014C5FC(a0, a1, &D_80183C08); -} - - -DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ - - -DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ - - -DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ - - -DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ - - -DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014C6F4); - -DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ - - -DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ - - -DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ - - -DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ - - -DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ - - -DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ - - -DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ - - -DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ - - -DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ - - -DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ - - -DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ - - -DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ - - -DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ - - -DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ - - -DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ - - -DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ - - -DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ - - -DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ - - -DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ - - -DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ - - -DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ - - -DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ - - -DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ - - -DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014CBE8); - -DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ - - -DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ - - - -extern void func_8014CD0C(u8 *a0); - -void func_8014CCB4(void) -{ - - extern int D_801A6B50; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014CD0C\n" - "lui $at, %%hi(D_801A6B50)\n" - "sw $v0, %%lo(D_801A6B50)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801A6B50)\n" - "lw $v0, %%lo(D_801A6B50)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014CD80); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014CF04); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D04C); - -DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D12C); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D2A0); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D3E0); - -DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D4C0); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D610); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D738); - -DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014D820); - -DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ - - -DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014DF3C); - -DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ - - -DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ - - -DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014E434); - -DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ - - -DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014E5B4); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014E6A0); - -DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ - - -DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ - - -DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014E934); - -DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ - - -DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014ED28); - -DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ - - -DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014F1F4); - -DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ - - -DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014F3E8); - - -extern void func_8014F4C0(u8 *a0); - -void func_8014F468(void) -{ - - extern int D_801A6B54; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F4C0\n" - "lui $at, %%hi(D_801A6B54)\n" - "sw $v0, %%lo(D_801A6B54)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801A6B54)\n" - "lw $v0, %%lo(D_801A6B54)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014F4C0); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014F6F4); - -DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ - - - -// @class: other -// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801A6B54; maspsx auto-fills jal delay slot) - -extern s32 func_8014FA70(s32 a0); - -void func_8014FA04(s32 a0) -{ - - extern s32 D_801A6B54; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "sw $ra, 16($sp)\n" - "lw $v0, 68($a0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 1f\n" - "addu $v0, $zero, $zero\n" - "lui $a1, 0x1f80\n" - "ori $a1, $a1, 0x03fc\n" - "addu $t0, $a1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "lui $at, %%hi(D_801A6B54)\n" - "sw $v0, %%lo(D_801A6B54)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801A6B54)\n" - "lw $v0, %%lo(D_801A6B54)($v0)\n" - "1:\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014FBC0); - -DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014FCFC); - -DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ - - -DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8014FE60); - - -extern s32 func_80135D20(s32 a0, s32 a1, void *a2); - -typedef struct { s16 unk0, unk2, unk4, unk6; } Vec8; - -s32 func_8014FFDC(s32 e, void *a1, void *a2) { - - extern u8 D_801202A0[]; - extern u8 D_80126720[]; - extern u8 D_801152A8[]; - Vec8 save; - Vec8 test; - s32 found; - u8 *p; - - found = 0; - __builtin_memcpy(&save, a1, 8); - *(s16 *)((s32)a1 + 2) = 0x7fff; - p = D_801202A0; - if (p < p + 0x6480) { - do { - if (*(u16 *)p != 0) { - if ((*(u16 *)(p + 0x5C) & 0x400) != 0) { - if (*(s32 *)(p + 0x58) != 0) { - test = save; - if (func_80135D20(*(s32 *)(p + 0x20), *(s32 *)(p + 0x58), &test) != 0) { - found = 1; - if (test.unk2 < *(s16 *)((s32)a1 + 2)) { - __builtin_memcpy(a1, &test, 8); - __builtin_memcpy(a2, D_801152A8, 8); - } - } - } - } - } - p += 0x10C; - } while (p < D_80126720); - } - return found; -} - - -DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ - - -DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ - - -extern s32 func_80135D20(s32 a0, s32 a1, void *a2); - - - -s32 func_801502EC(s32 e, void *a1, void *a2) { - - extern u8 D_801202A0[]; - extern u8 D_80126720[]; - extern u8 D_801152A8[]; - Vec8 save; - Vec8 test; - s32 found; - u8 *p; - - found = 0; - __builtin_memcpy(&save, a1, 8); - *(s16 *)((s32)a1 + 2) = 0x7fff; - p = D_801202A0; - if (p < p + 0x6480) { - do { - if (*(u16 *)p != 0) { - if ((*(u16 *)(p + 0x5C) & 0x400) != 0) { - if (*(s32 *)(p + 0x58) != 0) { - test = save; - if (func_80135D20(*(s32 *)(p + 0x20), *(s32 *)(p + 0x58), &test) != 0) { - found = 1; - if (test.unk2 < *(s16 *)((s32)a1 + 2)) { - __builtin_memcpy(a1, &test, 8); - __builtin_memcpy(a2, D_801152A8, 8); - } - } - } - } - } - p += 0x10C; - } while (p < D_80126720); - } - return found; -} - - -DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80150480); - -DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ - - -DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ - - -DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801506A4); - -DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ - - -DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ - - -DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ - - -DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ - - - -extern s32 func_80021174(s32 a0, s32 a1); - -s32 func_8015094C(s32 param_1) { - - extern S16 D_801A61BC; - extern s32 D_80183C38; - extern s32 D_80126990; - extern s32 D_80126994; - extern u8 D_80126948[]; - struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ - S16 local; /* 0x10 @ 0x40 */ - s32 pad1[4]; /* 0x10 @ 0x50 */ - register u8 *cam __asm__("$17") = D_80126948; - s32 ret; - - local = D_801A61BC; - arg.x = *(short *)(param_1 + 6); - arg.mid = D_80126994; - arg.y = *(short *)(param_1 + 0xe); - ret = func_80021174(D_80183C38, (s32)&arg); - if (ret == 0) { - { - short cur = *(short *)(param_1 + 6); - s32 diff = D_80126990 - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - { - short cur = *(short *)(param_1 + 0xe); - s32 diff = *(s32 *)(cam + 0x50) - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - (void)&pad1; - return 1; - } - return 0; -} - - - -extern s32 func_8014FA70(s32 a0); -extern void func_80015978(s32 a0, s32 *a1); - -void func_80150A70(s32 a0) -{ - - extern s32 D_801A6B54; - __asm__ __volatile__( - ".set\tnoreorder\n" - "addiu $sp, $sp, -24\n" - "sw $s0, 16($sp)\n" - "addu $s0, $a0, $zero\n" - "sw $ra, 20($sp)\n" - "lh $v1, 6($s0)\n" - "lh $v0, 136($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 10($s0)\n" - "lh $v0, 138($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 14($s0)\n" - "lh $v0, 140($s0)\n" - "nop\n" - "beq $v1, $v0, 3f\n" - "nop\n" - "1:\n" - "lw $v0, 68($s0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 2f\n" - "addiu $a0, $s0, 4\n" - "lui $a2, 0x1f80\n" - "ori $a2, $a2, 0x03fc\n" - "addu $t0, $a2, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "addu $a0, $s0, $zero\n" - "lui $at, %%hi(D_801A6B54)\n" - "sw $v0, %%lo(D_801A6B54)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "addiu $a0, $s0, 4\n" - "2:\n" - "jal func_80015978\n" - "addiu $a1, $s0, 136\n" - "3:\n" - "lw $ra, 20($sp)\n" - "lw $s0, 16($sp)\n" - "addiu $sp, $sp, 24\n" - ".set\treorder\n" - : : : "memory"); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) - - -void func_80150B28(int param_1) { - - extern s32 D_800AE6B0; - extern void (*D_80183C3C[])(void); - u32 idx; - register u32 sub __asm__("$2"); - - if ((D_800AE6B0 & 0x80FFFFFF) == 0) { - idx = *(u16 *)(param_1 + 0x16C); - if (idx != 0 && idx < 0x26) { - sub = idx - 1; - D_80183C3C[sub](); - } - } - *(u16 *)(param_1 + 0x16C) = 0; -} - - -void func_80150B9C(void) { -} - -DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ - - -DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ - - -DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ - - -DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ - - -DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ - - -DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ - - -DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ - - -DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ - - -DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ - - -DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ - - -DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ - - -DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ - - -DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ - - -DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ - - -DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ - - -DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ - - -DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ - - -DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ - - -DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ - - -DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ - - -DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ - - -void func_80150F78(void) { -} - -DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ - - -DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ - - -DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ - - -DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ - - -DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ - - -DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ - - -DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ - - -void func_801510B8(void) { -} - -void func_801510C0(void) { -} - -DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ - - -DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ - - -DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ - - -void func_80151130(void) { -} - -DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ - - -DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ - - -DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ - - -DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ - - -DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ - - -DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ - - -DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ - - -DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ - - -DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ - - -DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80151664); - -DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ - - -DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ - - -DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ - - -void func_80151878(void) { -} - -DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ - - -DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ - - -DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80151944); - -DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ - - -DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ - - -DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80151B98); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_80151C54); - - - -void func_80151D24(void *a0) { - - extern void (*D_80183CE0[])(void); - D_80183CE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ - - -DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ - - -DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ - - -DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ - - -DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ - - -DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ - - - - -void func_80152058(void *a0) { - - extern void (*D_80183D04[])(void); - D_80183D04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); - -void func_801520DC(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_80183CF4; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_801472C8(arg0); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_80183CF4); - func_801477E8(arg0, 0x40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); - func_80147324(0x441); - func_80146CA0(arg0); -} - - -DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ - - -DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ - - -DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801470AC(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80153C18(); -void func_801522CC(s32 a0) { - s32 v1; - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - func_80154A74(a0, 0x11); - func_801553C0(a0); - func_801470AC((s32 *)a0); - func_801472B4((void *)a0); - v1 = *(s32 *)(a0 + 0x20); - *(s16 *)(a0 + 0x3E) = 0; - *(s16 *)(a0 + 0x40) = 0; - *(s16 *)(a0 + 0x42) = 0; - *(u8 *)(a0 + 0xDD) = 0; - *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; - *(s16 *)(v1 + 0x10) = 0; - *(u16 *)(a0 + 0x60) = 0x1000; - *(u16 *)(a0 + 0x62) = 0x1000; - *(u16 *)(a0 + 0x64) = 0x1000; - func_801477E8((s32 *)a0, 0); - func_80153C18(a0); -} - - - - -void func_80152370(void *a0) { - - extern void (*D_80183D18[])(void); - D_80183D18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (67 ins) - -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80019064(void *a0); -extern int func_80151204(int arg, int a1); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - - -void func_801523F4(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern s32 D_800D58AC; - extern u8 D_80183D24[]; - s32 pad[4]; - s32 buf[4]; - register s32 s0a __asm__("$16"); /* $s0 = buf */ - register s32 s2a __asm__("$18") = (s32)&D_80183D24; /* $s2 = &D_80183D24 */ - - ((void (*)(s32, s32))func_80146E90)(arg0, 0); - func_80019064(&D_80062C04); - ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); - if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), - (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); - } else { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); - } - func_80154A74(arg0, 0x16); - ((void (*)(s32))func_80149020)(arg0); - s0a = (s32)buf; - ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, - s2a, s0a); - ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); - ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); - func_80147324(0x451); - ((void (*)(s32))func_80146CA0)(arg0); - (void)pad; -} - - -DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ - - -DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ - - - - -void func_80152698(void *a0) { - - extern void (*D_80183D34[])(void); - D_80183D34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ - - -DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ - - -DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ - - - - -void func_8015282C(void *a0) { - - extern void (*D_80183D4C[])(void); - D_80183D4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_801528B0(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_80183D3C; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_80183D3C); - func_801477E8(arg0, 0xFFF00000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ - - -DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ - - -DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ - - -DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ - - - - -void func_80152B6C(void *a0) { - - extern void (*D_80183D60[])(void); - D_80183D60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ - - -DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ - - -DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ - - -DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ - - - - -void func_80152D24(void *a0) { - - extern void (*D_80183D7C[])(void); - D_80183D7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_80152DA8(s32 arg0) -{ - - extern s32 D_80062C14; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_80183D6C; - func_80019064(&D_80062C14); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - M2C_FIELD(arg0, s8 *, 0xDF) = 8; - func_80146DB8(arg0, &D_80183D6C); - func_801477E8(arg0, 0xFFE40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ - - -DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ - - -DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ - - -DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ - - - - -void func_80153060(void *a0) { - - extern void (*D_80183D90[])(void); - D_80183D90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ - - -DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ - - -DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ - - -DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ - - -DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ - - -DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ - - - - -void func_80153320(void *a0) { - - extern void (*D_80183DA4[])(void); - D_80183DA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ - - -DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ - - -DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ - - -DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ - - -DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ - - -DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ - - -extern void func_80146D90(s32 a0); -extern void func_8014CC28(s32 a0); -extern void func_8014ED28(s32 _arg0); -extern void func_8014FA04(s32 a0); - -s32 func_801535F4(void *arg0) { - s32 var_s1; - register u32 flags __asm__("$4"); - register u32 fcopy __asm__("$3"); - s32 ret; - - var_s1 = 0; - if (((s32 (*)(void))func_8014ED28)() != 0) { - func_80146D90((s32)arg0); - } - if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && - (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { - var_s1 = 1; - } - flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); - fcopy = flags; - if (flags & 0x4000) { - ret = 2; - } else if (flags & 0x2000) { - ret = 1; - } else { - ret = 4; - if ((fcopy & 0x8000) == 0) { - ret = var_s1; - } - } - __asm__ __volatile__("" : : "r"(flags)); - return ret; -} - - -DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ - - -DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ - - -DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ - - -DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ - - -DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ - - -DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ - - -DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ - - -DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ - - -DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ - - -DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ - - -DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ - - -DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ - - -DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ - - -DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ - - -DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls -extern void func_80019064(void *a0); - -void func_80153CCC(S80153CCC *a0) { - - extern s32 D_80183DB8; - extern void (*D_80183DE0[])(void *a0); - extern s16 D_8011DB0C; - extern u16 D_8011F748; - ((s32 (*)(s32))func_80019064)((s32)&D_80183DB8); - D_80183DE0[a0->idx](a0); - D_8011DB0C = 0; - D_8011F748 = 0; -} - - -DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (33/33) - -extern void func_80147324(s32 arg0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_80146CA0(void *a0); -extern s16 currentLocationId; - -void func_80153D7C(s32 param_1) -{ - - extern u8 D_80183DC0; - func_80147324(0x451); - func_80154274((s32 *)param_1, (s32)&D_80183DC0); - func_80149020((s32 *)param_1); - *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); - *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); - *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); - if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; - else *(u8 *)(param_1 + 0xde) = 10; - *(u8 *)(param_1 + 0xdf) = 0; - __asm__ __volatile__("" ::: "memory"); - func_80146CA0((void *)param_1); -} - - -DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ - - -DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ - - -DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ - - -DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ - - -DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ - - -DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ - - -DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ - - -DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ - - -DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ - - -DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ - - -DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ - - -DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ - - -DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8013F350", func_801549F8); - -DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ - - -DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ - - -DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ - - -DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ - - -DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ - - -DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ - - -DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ - - -DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ - - -DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ diff --git a/src/ov_SC07_010/ov_SC07_010_jr_80140608.c b/src/ov_SC07_010/ov_SC07_010_jr_80140608.c new file mode 100644 index 000000000..1df8eca9f --- /dev/null +++ b/src/ov_SC07_010/ov_SC07_010_jr_80140608.c @@ -0,0 +1,4279 @@ +#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 { s32 a, b, c; } Rec12; +typedef struct { s32 a, b; s8 c; } __attribute__((packed, aligned(1))) Rec9; +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80016714(void *a0, s32 a1); +extern void func_8013C98C(void); +extern void func_80019064(void *a0); +extern void func_8013C9C4(void * arg0); +extern void func_8013CA14(void); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern s16 currentLocationId; +extern void func_8013DBE4(); +extern void func_8013D9B0(); +extern void func_8013D330(void); +extern void func_8013D178(void); +extern void func_8013CF68(void); +extern void func_8013CB84(void); +extern void func_8013CF68(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_800599B8(s32 a0, s32 a1); +extern void func_8013D9B0(int param_1); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s16 D_80126CB0; +extern s32 func_8013E298(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8012C724(s32 a0, s32 a1); +extern void func_8013E370(void); +extern u8 D_801202A0[]; +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_800132BC(s32 a0, s32 a1); +extern s32 func_8013E448(s32 param_1); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern void func_8013E558(void); +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_80029444(void); +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_800190AC(void); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E67C(void); +extern void func_8013E83C(void); +extern s32 func_80029504(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_80137B80(void); +extern void func_8013E958(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern short D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511A; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern s32 func_800D0488(s16 a0); +extern void func_800D2624(void); +extern void func_8013EF88(void); +extern void func_8013F138(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_8018305C[]; +extern u8 D_80183074[]; +extern u16 D_80182F78[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern int func_80137D08(int arg0, int arg1, short arg2); +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + + extern u8 *D_80183018; + extern u8 *D_8018301C; + extern u8 *D_80183020; + extern u8 *D_80183024; + extern u8 *D_80183028; + extern u16 *D_8018302C[]; + extern u16 *D_80183034[]; + extern u16 *D_80183054[]; + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_80183018; + iVar2 = func_80028D58(); + puVar3 = D_8018302C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8018301C; + iVar2 = func_80028DE0(); + puVar3 = D_8018302C[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_80183020 + 0x18) = *D_80183034[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_80183024 + 0x18) = *D_80183034[iVar2]; + + puVar1 = D_80183028; + iVar2 = func_80028D9C(); + puVar3 = D_80183054[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + + extern unsigned char D_80078E7F; + extern unsigned char D_80078E7E; + extern unsigned char D_80078E7D; + extern M2C_UNK D_80182F54; + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_80182F54); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + + extern short D_80115128; + extern u8 D_80182F64; + extern char *D_80182F84; + extern char *D_80182F88; + extern char *D_80182F8C; + extern char *D_80182F90; + extern char *D_80182F94; + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_80182F64); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_80182F84; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182F88; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182F8C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182F90; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_80182F94; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + + +// @class: other +// @stuck: none — MATCH + + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + + extern short D_80115128; + extern unsigned short D_80115172; + extern unsigned short D_80182E1E; + extern unsigned short D_80182E22; + extern unsigned short D_80182E26; + extern unsigned short D_80182E2A; + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_80182E1E; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_80182E22; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182E26; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_80182E2A; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ + + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ + + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ + + + + +void func_80141788(void) +{ + + extern unsigned short D_80115112; + extern void (*D_801833B4[])(void); + D_801833B4[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ + + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ + + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + + +void func_80141874(void) { + + extern u16 D_8011511E; + extern u16 D_8011511C; + extern unsigned short D_80115112; + extern u16 D_80115116; + extern void (*D_801833C0[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_801833C0[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern u8 D_80115158[]; +extern u8 D_8011515C; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern u16 D_80115112; + extern unsigned short D_80115118; + extern s32 D_80115130; + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_80182FD8; + extern u8 D_80182FF0; + extern u8 D_80183064; + extern u8 D_8018306C; + extern s16 D_80183338; + extern s16 D_8018333A; + extern void *D_801A6B00; + extern void *D_801A6B04; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_801A6B00 = &D_80182FD8; + D_801A6B04 = &D_80183064; + } else { + D_801A6B00 = &D_80182FF0; + D_801A6B04 = &D_8018306C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_80183338 = 0xE; + D_8018333A = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8018333C: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern s16 D_800B9A02; + extern u8 D_801151C8[]; + extern s32 D_801151D0; + extern u8 D_8011514D; + extern s32 D_80115130; + extern u8 D_8018333C; + extern u16 D_80115116; + extern u16 D_80115112; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8018333C); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80141B90); + +void func_80141C04(void) { +} + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + + extern u16 D_80115110; + extern u8 D_80183314; + func_8002D4C8(*(u16 *)(&D_80183314 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ + + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ + + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_801833E4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_801833E4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + + +void func_801425CC(void *a0) { + + extern void (*D_801833F4[])(void); + D_801833F4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); + +void func_80142608(s32 param_1) +{ + + extern s32 D_801833D8; + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_801833D8); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ + + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + + +void func_801427DC(void) { +} + +void func_801427E4(void) { +} + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801427EC(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_80183408[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_80183408[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80142838); + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_8014292C(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_80183424[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_80183424[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_80142978(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_801835F4[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_801835F4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801429C4(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_801836AC[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_801836AC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + + +void func_80142A80(void) +{ + + extern u16 D_800B99D8; + extern struct packed_word D_801A61B8; + extern u8 D_801A6B08; + extern u8 D_801A6B09; + extern u8 D_801A6B0A; + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_801A61B8; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_801A6B08 = mul * (local.b[0] >> 4); + D_801A6B09 = mul * (local.b[1] >> 4); + D_801A6B0A = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80142B2C); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80142BB4); + +void func_80142C7C(void) { +} + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ + + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ + + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ + + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142DC4(int param_1) +{ + + extern int D_801833FC; + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_801833FC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142E38(int param_1) +{ + + extern unsigned char D_80183418[]; + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_80183418); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_801835E4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_801835E4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80142F68); + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_8014305C(int param_1) +{ + + extern unsigned char D_80183604[]; + extern unsigned char D_80183664[]; + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_80183604); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_80183664); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801430F4); + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + + +void func_801431E8(s32 param_1) { + + extern u8 D_801A61B4; + extern u8 D_801A6B08; + extern u8 D_801A6B0C; + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_801A61B4, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_801A6B08); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_801A6B08, 0x10); + memcpy(&D_801A6B0C, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ + + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801433F0); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + + extern u8 D_800D387C[]; + extern u32 D_801837BC[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801837BC[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014350C); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_8014358C(s32 param_1) +{ + + extern u8 D_801837CC[]; + extern u32 D_801838C8[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_801837CC; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_801838C8[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ + + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ + + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ + + + + +void func_80143B30(void *a0) { + + extern void (*D_801838E4[])(void); + D_801838E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ + + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ + + + + +void func_80143C38(void *a0) { + + extern void (*D_801838F0[])(void); + D_801838F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ + + + + +void func_80143C98(void *a0) { + + extern void (*D_801838F8[])(void); + D_801838F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (80 ins, relocation-masked). iVar2/iVar3 pinned $s1/$s2; sVar4 is an +// int set BEFORE the call so it naturally takes callee-saved $s3; chained assignment +// a=b=c=sVar4 materializes the value once (the addu $v0,$s3,$zero move) + delay-slot store. + + /* size 0x0c */ + +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +void func_80143D28(s32 param_1) { + + extern MatEntry D_8018391C[]; + register s32 iVar3 __asm__("$18") = *(s32 *)(param_1 + 0x20); /* $s2 */ + register s32 iVar2 __asm__("$17") = *(s32 *)(param_1 + 0x64); /* $s1 */ + MatEntry *p = &D_8018391C[*(s16 *)(param_1 + 0x70)]; + s32 sVar4; + s32 iVar1; + + *(s16 *)(iVar3 + 0x14) = p->f8; + *(u16 *)(iVar3 + 0x12) = *(u16 *)(iVar3 + 0x12) + p->fa; + sVar4 = 0x1000; + ApplyMatrixSV((void *)(*(s32 *)(param_1 + 0x20) + 0x34), p, (void *)(param_1 + 0x50)); + + if (*(s16 *)(param_1 + 0xfe) == 0 && + (iVar2 == 0 || *(s16 *)(iVar2 + 0x36) != *(s16 *)(param_1 + 0xfc) || + *(u8 *)(iVar2 + 0xc1) != 6)) { + if (0x10 < *(s32 *)(param_1 + 0x1c)) { + *(s32 *)(param_1 + 0x1c) = 0x10; + } + *(s16 *)(param_1 + 0xfe) = 1; + } + + iVar1 = *(s32 *)(param_1 + 0x1c); + if (iVar1 < 0x11) { + sVar4 = iVar1 << 8; + } + if (0x73 < iVar1) { + sVar4 = (0x78 - iVar1) << 10; + } + *(s16 *)(iVar3 + 0x18) = *(s16 *)(iVar3 + 0x1a) = *(s16 *)(iVar3 + 0x1c) = sVar4; + + if (func_8012BEE8(param_1)) { + func_8012C218((void *)param_1); + } +} + + + + +void func_80143E68(void *a0) { + + extern void (*D_80183940[])(void); + D_80183940[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80143EA4(void) { +} + +void func_80143EAC(void) { +} + +void func_80143EB4(void) { +} + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ + + + + +void func_80144054(void *a0) { + + extern void (*D_80183954[])(void); + D_80183954[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: 154/154 ins structural match (callees/consts/ctrl-flow/stack/GPU-packet all byte-correct); residual 25 = caller-saved temp-reg coalescing in the final ring-vertex block (target reuses dead $s0=iVar3 for iVar3-(iVar4>>6) subu where gcc reuses iVar4>>6's reg; iVar4 mflo -> $a3 vs target $v0) + 2-ins schedule swap of giv-increment vs iVar2*4 -> permuter grinder territory (§27 step-5) + + /* 0x14 stride */ + +extern void *func_80010A08(s32); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 AddPrim(s32, void *); + +void func_80144090(s32 param_1) { + + extern OtBlk D_800A651C[]; + extern u8 D_800AF648; + extern short D_800B9A02; + void *iVar1; + s32 iVar2; + s32 iVar3; + s32 iVar4; + s32 iVar5; + s32 iVar6; + struct { + s16 v10[4]; + u16 sxy[2]; + s32 p; + s32 flag; + } L; + + iVar1 = func_80010A08(0x140); + if (iVar1 != 0) { + *(s32 *)(param_1 + 4) = *(s32 *)(param_1 + 4) + *(s32 *)(param_1 + 0x10); + *(s32 *)(param_1 + 8) = *(s32 *)(param_1 + 8) + *(s32 *)(param_1 + 0x14); + *(s32 *)(param_1 + 0xc) = *(s32 *)(param_1 + 0xc) + *(s32 *)(param_1 + 0x18); + L.v10[0] = *(u16 *)(param_1 + 6); + L.v10[1] = *(u16 *)(param_1 + 0xa); + L.v10[2] = *(u16 *)(param_1 + 0xe); + func_8004914C(&D_800AF648); + func_800491AC(&D_800AF648); + iVar2 = RotTransPers((s32)L.v10, (s32)L.sxy, &L.p, &L.flag); + iVar2 = iVar2 + 4; + if (iVar2 < 0) { + iVar2 = 0; + } + iVar6 = 0; + do { + *(s32 *)((u8 *)iVar1 + 4) = 0xffffff; + *(u8 *)((u8 *)iVar1 + 3) = 4; + *(u8 *)((u8 *)iVar1 + 7) = 0x20; + if (*(s32 *)(param_1 + 0x1c) - 6 < 1) { + *(s16 *)((u8 *)iVar1 + 8) = L.sxy[0]; + *(s16 *)((u8 *)iVar1 + 0xa) = L.sxy[1]; + } else { + iVar5 = func_8004787C(iVar6); + *(s16 *)((u8 *)iVar1 + 8) = L.sxy[0] + ((iVar5 * ((*(s32 *)(param_1 + 0x1c) - 6) << 4)) >> 0xc); + iVar5 = func_80047948(iVar6); + *(s16 *)((u8 *)iVar1 + 0xa) = L.sxy[1] + ((iVar5 * ((*(s32 *)(param_1 + 0x1c) - 6) << 4)) >> 0xc); + } + iVar3 = func_8004787C(iVar6) * (*(s32 *)(param_1 + 0x1c) << 4); + iVar4 = func_80047948(iVar6) * (*(s32 *)(param_1 + 0x1c) << 4); + iVar6 = iVar6 + 0x100; + *(s16 *)((u8 *)iVar1 + 0x10) = L.sxy[0] + ((iVar3 + (iVar4 >> 6)) >> 0xc); + *(s16 *)((u8 *)iVar1 + 0x12) = L.sxy[1] + ((iVar4 + (iVar3 >> 6)) >> 0xc); + *(s16 *)((u8 *)iVar1 + 0xc) = L.sxy[0] + ((iVar3 - (iVar4 >> 6)) >> 0xc); + *(s16 *)((u8 *)iVar1 + 0xe) = L.sxy[1] + ((iVar4 - (iVar3 >> 6)) >> 0xc); + AddPrim(D_800A651C[(u16)D_800B9A02].a + (iVar2 * 4), iVar1); + iVar1 = (u8 *)iVar1 + 0x14; + } while (iVar6 < 0x1000); + } +} + + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + + +void func_801442F8(int param_1) +{ + + extern void (*D_8018395C[])(); + int iVar1; + + D_8018395C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +void func_80144364(int param_1) { + + extern u8 D_801838D8; + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_801838D8, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80144458); + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014462C); + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); + +void func_8014477C(void *param_1) { + + extern u8 D_80183900; + extern u8 D_8018390C; + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_80183900); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8018390C); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + + +void func_80144880(s32 param_1) +{ + + extern u8 D_801838D8; + extern u8 D_80183948; + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_801838D8, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80183948, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + + + +void func_801449C8(void *a0) { + + extern void (*D_80183964[])(void); + D_80183964[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ + + + + +void func_80144A2C(void *a0) { + + extern void (*D_8018396C[])(void); + D_8018396C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ + + +void func_80144A90(void) { +} + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ + + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80144B14); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80144B9C); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801457A4); + +void func_801458E0(void) { +} + +DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801844F8 block defeats the tail-merge of the two identical D_801844F8 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145934(void) { + + extern u8 D_801844F8; + extern u8 D_80184468; + extern u8 D_80184444; + extern u8 D_80184420; + extern u8 D_801844D4; + extern u8 D_801844B0; + extern u8 D_8018448C; + extern u8 D_801843FC; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_801844F8; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801844F8 load from being + * tail-merged with the v>=0x384 D_801844F8 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_80184468; + } else if (v >= 0x578) { + p = &D_80184444; + } else if (v >= 0x514) { + p = &D_80184420; + } else if (v >= 0x384) { + p = &D_801844F8; + } else if (v >= 0x258) { + p = &D_801844D4; + } else if (v >= 0xC8) { + p = &D_801844B0; + } else if (v >= 0xA) { + p = &D_8018448C; + } else { + p = &D_801843FC; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80184588 block defeats the tail-merge of the two identical D_80184588 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145A2C(void) { + + extern u8 D_80184588; + extern u8 D_80184468; + extern u8 D_80184444; + extern u8 D_80184420; + extern u8 D_80184564; + extern u8 D_80184540; + extern u8 D_8018451C; + extern u8 D_801843FC; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_80184588; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80184588 load from being + * tail-merged with the v>=0x384 D_80184588 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_80184468; + } else if (v >= 0x578) { + p = &D_80184444; + } else if (v >= 0x514) { + p = &D_80184420; + } else if (v >= 0x384) { + p = &D_80184588; + } else if (v >= 0x258) { + p = &D_80184564; + } else if (v >= 0xC8) { + p = &D_80184540; + } else if (v >= 0xA) { + p = &D_8018451C; + } else { + p = &D_801843FC; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + +DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ + + +DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ + + +DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80145CEC); + + + +// @class: schedule +// @stuck: branch layout — 3-way dispatch on param_1; trying switch form + +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); + + +void func_80145EE8(s32 param_1) +{ + + extern unsigned char D_80183980[]; + extern unsigned char D_801839B0[]; + extern unsigned char D_80183A00[]; + extern unsigned char D_80183A30[]; + extern unsigned char D_80183A60[]; + switch (param_1) { + case 0: + if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { + ((void (*)(void *))func_80146014)(D_80183980); + } + if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { + ((void (*)(void *))func_80146014)(D_801839B0); + } + if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { + ((void (*)(void *))func_80146014)(D_80183A00); + } + if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { + ((void (*)(void *))func_80146014)(D_80183A30); + } + if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { + return; + } + ((void (*)(void *))func_80146014)(D_80183A60); + break; + case 1: + ((void (*)(void *))func_80146014)(D_80183980); + ((void (*)(void *))func_80146014)(D_801839B0); + ((void (*)(void *))func_80146014)(D_80183A00); + ((void (*)(void *))func_80146014)(D_80183A30); + ((void (*)(void *))func_80146014)(D_80183A60); + break; + } +} + + +DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ + + +void func_80146074(void) { +} + + +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); + +void func_8014607C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146128\n" + "lui $at, %%hi(D_801A6B48)\n" + "sw $v0, %%lo(D_801A6B48)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801A6B48)\n" + "lw $v0, %%lo(D_801A6B48)($v0)\n" + "nop\n" + "beqz $v0, .L80146114\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146360\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_801463A0\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + ".L80146114:\n" + "nop\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (fnptr-table idiom: D_80183AB0[u8 idx](&arg)) + +void func_80146360(void) +{ + + extern void (*D_80183AB0[])(void *); + extern u8 D_80126BA4; + extern s32 D_80126B58; + D_80183AB0[D_80126BA4](&D_80126B58); +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801463A0); + +DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ + + +DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ + + +DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ + + +DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ + + +DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ + + +DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ + + +DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ + + +DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801466F0); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80146750); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014680C); + +DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ + + +DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ + + +DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ + + +DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80146A6C); + +DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80146AFC); + +DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ + + +DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ + + +DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ + + +DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ + + +DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ + + +DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ + + +DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ + + +DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ + + +DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ + + +DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ + + +DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ + + +DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ + + +DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ + + +DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ + + +DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80146F58); + +DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ + + +DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ + + +DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ + + +DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ + + +DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ + + +DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ + + +DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ + + +DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ + + +DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ + + +DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ + + +DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ + + +DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ + + +DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ + + +DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ + + +DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ + + +DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ + + +DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ + + +DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ + + +DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ + + +DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ + + +DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ + + +DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80147364); + +DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ + + +DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ + + +DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ + + +DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ + + +DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ + + +DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ + + +DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ + + +DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ + + +DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ + + +DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ + + +DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ + + +DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ + + +DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ + + +DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ + + +DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ + + +DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ + + +DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ + + +DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ + + +DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ + + +DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ + + +DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ + + +DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ + + +DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ + + +DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ + + +DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ + + +DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ + + +DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ + + +DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ + + +DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ + + +DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ + + +DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ + + +DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ + + +DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ + + +DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ + + +DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ + + +DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801483E8); + +DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ + + +DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ + + +DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ + + +DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ + + +DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ + + +DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ + + +DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ + + +DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ + + +DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ + + +DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ + + +DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ + + +DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ + + +DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ + + +DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ + + +DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ + + +DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ + + +DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ + + +DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg + +extern s32 ratan2(s32 a0, s32 a1); + +int func_80148AFC(void *a0) { + + extern s32 D_801151D4; + extern ActorFn D_80183AB8[]; + s32 p = (s32)a0; + s32 iVar5 = *(s32 *)(p + 0x20); + register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 sVar3; + u8 bVar1; + __asm__("" : "=r"(tmp) : "0"(tmp)); + sVar3 = tmp; + bVar1 = *(u8 *)(p + 0xA9); + + switch (bVar1) { + case 0x41: + return D_80183AB8[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; + case 0x53: + case 0x73: + { + register u32 bb __asm__("$3"); + register s32 c80 __asm__("$2") = 0x80; + register s32 lo __asm__("$4"); + register s32 hi __asm__("$2"); + bb = *(u16 *)(p + 0xAE); + lo = bb & 0xFF; + if (lo != c80 || (hi = bb >> 8) != 0x80) { + s32 sVar4; + __asm__ __volatile__("" : : : "memory"); + sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); + *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; + return 1; + } + return 0; + } + } +} + + +DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ + + +DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ + + +DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ + + +DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ + + +DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ + + +DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ + + +DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ + + +DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ + + +DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ + + +DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ + + +DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ + + +DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ + + +DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ + + +DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ + + +DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ + + +DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (68 ins) +extern s32 ratan2(s32 a0, s32 a1); + +s32 func_80148D44(void) { + + extern s32 D_801151D4; + extern u8 D_80126C01; + extern u16 D_80126C02; + extern u16 D_80126C06; + extern s32 D_80183AF8[]; + register s32 ang __asm__("$16"); + register s32 a __asm__("$4"); + s32 p; + s32 res; + s32 d; + + p = D_801151D4; + a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), + *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; + d = (s32)D_80126C01; + __asm__ __volatile__("" : : "r"(a)); + ang = a; + if (d == 0x53) { + goto final; + } + if (d < 0x54) { + if (d == 0x41) { + goto call; + } + return 0x41; + } + if (d != 0x73) { + return 0x73; + } + goto final; +call: + return (s32)(s16)((s16 (*)())(D_80183AF8[D_80126C02 >> 0xc]))(); +final: + { + u32 e = D_80126C06; + if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { + return -1; + } + __asm__ __volatile__("" : : : "memory"); + res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; + } + return res; +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80148E54); + +DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ + + +DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ + + +DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ + + +DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ + + +DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ + + +DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ + + +DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ + + +DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ + + +DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ + + +DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ + + +DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ + + +DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ + + +DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ + + +DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ + + +DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ + + +DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ + + +DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ + + +DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ + + +DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ + + +DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ + + +DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ + + +DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ + + +DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ + + +DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ + + +DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ + + +DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ + + +DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ + + +DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ + + +DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ + + +DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ + + +DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ + + +DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ + + +DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ + + +extern void func_8012F14C(s32); +void func_80149350(s32 arg0) { + func_8012F14C(*(s32 *)(arg0 + 0x20) + 0x34); +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80149374); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801493D0); + +extern void func_8012F038(s32); +void func_8014942C(s32 arg0) { + func_8012F038(*(s32 *)(arg0 + 0x20) + 0x34); +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80149450); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801494CC); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80149544); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80149584); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801495C4); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014964C); + +DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ + + +DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ + + +DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ + + +DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ + + +DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801497A8); + +DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ + + +DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ + + +DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ + + +DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80149954); + +DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ + + +DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ + + +DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ + + +DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ + + +DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ + + +DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ + + +DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ + + +DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ + + +DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ + + +DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ + + +DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ + + +DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ + + +DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ + + +DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ + + +DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80149F2C); + +void func_80149FA8(void) { +} + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins) +extern s16 currentLocationId; + +s32 func_80149FB0(s32 a0) { + + extern s32 D_80183B78[]; + extern u8 D_80078E78[]; + s32 *p = &D_80183B78[0]; + register s32 v __asm__("$3") = *p; + u8 *q = &D_80078E78[0]; + s32 loc; + + if (v != 0) { + loc = currentLocationId; + p = p + 1; + do { + if (loc == v) { + goto ret0; + } + v = *p; + p = p + 1; + } while (v != 0); + } + + if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { + return 0; + } + if (*(s16 *)(a0 + 0x1C8) != 0) { + return 0; + } + if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { + ret0: + return 0; + } + v = q[0x48]; + q[0x48] = v ^ 0x80; + return 1; +} + + +extern u8 func_8014BEF8(void); +extern void func_8012F14C(s32); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +s32 func_8014A048(s32 param_1) { + + extern u8 D_801202A0[]; + Loc L; + s32 s0; + s32 s2; + u32 s3; + if ((*(u32 *)(param_1 + 0x44) & 0x400) != 0) { + return 0; + } + if ((*(u16 *)(param_1 + 0xAC) & 0x80) == 0) { + if ((*(u16 *)(param_1 + 0xAC) & 0x10) == 0) { + return 0; + } + if (((s32 (*)(s32))func_8014BEF8)(param_1) == 0) { + goto ret0; + } + } + L.a30 = *(s16 *)(param_1 + 6); + L.a2e = *(s16 *)(param_1 + 0xA); + L.a2c = *(s16 *)(param_1 + 0xE); + L.a1e = -0x10; + L.a20 = 0; + L.a1c = -0x20; + ((void (*)(s32, s32, s32))func_8012F14C)(*(s32 *)(param_1 + 0x20) + 0x34, (s32)&L.a20, (s32)L.buf); + s3 = 0; + s2 = 0; + while (1) { + s0 = (s32)D_801202A0 + s2; + __asm__ __volatile__("" : "=r"(s0) : "0"(s0)); + if ((*(u16 *)s0 != 0) && + (*(s32 *)(s0 + 0x58) != 0) && + (*(s16 *)(s0 + 0xAA) == 0) && + (*(s32 *)(param_1 + 0x184) != s0) && + ((*(u16 *)(s0 + 0x5C) & 0x200) != 0) && + (((s32 (*)(s32, s32, s32, s32))func_80135260)(*(s32 *)(s0 + 0x20), *(s32 *)(s0 + 0x58), (s32)&L.a30, (s32)L.buf) != 0)) { + break; + } + s3++; + s2 += 0x10C; + if (s3 >= 0x60) { + return 0; + } + } + *(s32 *)(param_1 + 0x178) = s0; + func_8014A1B0(param_1, s0); + return 1; +ret0: + return 0; +} + + +DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ + + +DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ + + +DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ + + +DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ + + +DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ + + +DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ + + +DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ + + +DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ + + +DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014A51C); + +DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ + + +DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ + + +DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ + + +DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ + + +DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ + + +DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ + + +DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ + + +DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014A738); + +DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ + + +DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ + + +DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ + + +DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ + + +DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ + + +DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ + + +DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ + + +DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ + + +DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ + + +DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ + + +DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ + + +DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ + + +DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ + + +DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ + +DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ + + +DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ + + +DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ + + +DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ + + +DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ + + +DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ + + +DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ + + +DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ + + +DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ + + +DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ + + +DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ + + +DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ + + +DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ + + +DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ + + +DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ + + +DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ + + +DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ + + +DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ + + +DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ + + +DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ + + +DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ + + +DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ + + +DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ + + +DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ + + +DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ + + +DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ + + +DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ + + +DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ + + +DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ + + +DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ + + +DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ + + +DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ + + +DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ + + +DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ + + +DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ + + +DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ + + +DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ + + +void func_8014BDE0(void) { +} + +DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ + + +DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ + + +DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ + + +DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ + + +DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ + + +DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ + + +DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ + + +DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ + + +DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ + + +DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ + + +DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ + + +DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ + + +DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ + + +DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ + + +DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ + + +DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ + + +DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ + + +DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014C1A0); + +DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ + + +DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ + + +DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ + + +DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ + + +DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ + + +DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ + + +DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014C4AC); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014C568); + +DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ + + + +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); + +s16 func_8014C5D0(s32 a0, s32 a1) { + + extern u8 D_80183C08; + return func_8014C5FC(a0, a1, &D_80183C08); +} + + +DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ + + +DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ + + +DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ + + +DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ + + +DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014C6F4); + +DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ + + +DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ + + +DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ + + +DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ + + +DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ + + +DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ + + +DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ + + +DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ + + +DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ + + +DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ + + +DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ + + +DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ + + +DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ + + +DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ + + +DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ + + +DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ + + +DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ + + +DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ + + +DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ + + +DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ + + +DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ + + +DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ + + +DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ + + +DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014CBE8); + +DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ + + +DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ + + + +extern void func_8014CD0C(u8 *a0); + +void func_8014CCB4(void) +{ + + extern int D_801A6B50; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014CD0C\n" + "lui $at, %%hi(D_801A6B50)\n" + "sw $v0, %%lo(D_801A6B50)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801A6B50)\n" + "lw $v0, %%lo(D_801A6B50)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014CD80); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014CF04); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D04C); + +DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D12C); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D2A0); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D3E0); + +DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D4C0); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D610); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D738); + +DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014D820); + +DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ + + +DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014DF3C); + +DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ + + +DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ + + +DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014E434); + +DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ + + +DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014E5B4); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014E6A0); + +DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ + + +DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ + + +DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014E934); + +DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ + + +DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014ED28); + +DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ + + +DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014F1F4); + +DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ + + +DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014F3E8); + + +extern void func_8014F4C0(u8 *a0); + +void func_8014F468(void) +{ + + extern int D_801A6B54; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F4C0\n" + "lui $at, %%hi(D_801A6B54)\n" + "sw $v0, %%lo(D_801A6B54)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801A6B54)\n" + "lw $v0, %%lo(D_801A6B54)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014F4C0); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014F6F4); + +DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ + + + +// @class: other +// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801A6B54; maspsx auto-fills jal delay slot) + +extern s32 func_8014FA70(s32 a0); + +void func_8014FA04(s32 a0) +{ + + extern s32 D_801A6B54; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "sw $ra, 16($sp)\n" + "lw $v0, 68($a0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 1f\n" + "addu $v0, $zero, $zero\n" + "lui $a1, 0x1f80\n" + "ori $a1, $a1, 0x03fc\n" + "addu $t0, $a1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "lui $at, %%hi(D_801A6B54)\n" + "sw $v0, %%lo(D_801A6B54)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801A6B54)\n" + "lw $v0, %%lo(D_801A6B54)($v0)\n" + "1:\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014FBC0); + +DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014FCFC); + +DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ + + +DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014FE60); + + +extern s32 func_80135D20(s32 a0, s32 a1, void *a2); + +typedef struct { s16 unk0, unk2, unk4, unk6; } Vec8; + +s32 func_8014FFDC(s32 e, void *a1, void *a2) { + + extern u8 D_801202A0[]; + extern u8 D_80126720[]; + extern u8 D_801152A8[]; + Vec8 save; + Vec8 test; + s32 found; + u8 *p; + + found = 0; + __builtin_memcpy(&save, a1, 8); + *(s16 *)((s32)a1 + 2) = 0x7fff; + p = D_801202A0; + if (p < p + 0x6480) { + do { + if (*(u16 *)p != 0) { + if ((*(u16 *)(p + 0x5C) & 0x400) != 0) { + if (*(s32 *)(p + 0x58) != 0) { + test = save; + if (func_80135D20(*(s32 *)(p + 0x20), *(s32 *)(p + 0x58), &test) != 0) { + found = 1; + if (test.unk2 < *(s16 *)((s32)a1 + 2)) { + __builtin_memcpy(a1, &test, 8); + __builtin_memcpy(a2, D_801152A8, 8); + } + } + } + } + } + p += 0x10C; + } while (p < D_80126720); + } + return found; +} + + +DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ + + +DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ + + +extern s32 func_80135D20(s32 a0, s32 a1, void *a2); + + + +s32 func_801502EC(s32 e, void *a1, void *a2) { + + extern u8 D_801202A0[]; + extern u8 D_80126720[]; + extern u8 D_801152A8[]; + Vec8 save; + Vec8 test; + s32 found; + u8 *p; + + found = 0; + __builtin_memcpy(&save, a1, 8); + *(s16 *)((s32)a1 + 2) = 0x7fff; + p = D_801202A0; + if (p < p + 0x6480) { + do { + if (*(u16 *)p != 0) { + if ((*(u16 *)(p + 0x5C) & 0x400) != 0) { + if (*(s32 *)(p + 0x58) != 0) { + test = save; + if (func_80135D20(*(s32 *)(p + 0x20), *(s32 *)(p + 0x58), &test) != 0) { + found = 1; + if (test.unk2 < *(s16 *)((s32)a1 + 2)) { + __builtin_memcpy(a1, &test, 8); + __builtin_memcpy(a2, D_801152A8, 8); + } + } + } + } + } + p += 0x10C; + } while (p < D_80126720); + } + return found; +} + + +DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80150480); + +DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ + + +DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ + + +DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801506A4); + +DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ + + +DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ + + +DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ + + +DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ + + + +extern s32 func_80021174(s32 a0, s32 a1); + +s32 func_8015094C(s32 param_1) { + + extern S16 D_801A61BC; + extern s32 D_80183C38; + extern s32 D_80126990; + extern s32 D_80126994; + extern u8 D_80126948[]; + struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ + S16 local; /* 0x10 @ 0x40 */ + s32 pad1[4]; /* 0x10 @ 0x50 */ + register u8 *cam __asm__("$17") = D_80126948; + s32 ret; + + local = D_801A61BC; + arg.x = *(short *)(param_1 + 6); + arg.mid = D_80126994; + arg.y = *(short *)(param_1 + 0xe); + ret = func_80021174(D_80183C38, (s32)&arg); + if (ret == 0) { + { + short cur = *(short *)(param_1 + 6); + s32 diff = D_80126990 - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + { + short cur = *(short *)(param_1 + 0xe); + s32 diff = *(s32 *)(cam + 0x50) - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + (void)&pad1; + return 1; + } + return 0; +} + + + +extern s32 func_8014FA70(s32 a0); +extern void func_80015978(s32 a0, s32 *a1); + +void func_80150A70(s32 a0) +{ + + extern s32 D_801A6B54; + __asm__ __volatile__( + ".set\tnoreorder\n" + "addiu $sp, $sp, -24\n" + "sw $s0, 16($sp)\n" + "addu $s0, $a0, $zero\n" + "sw $ra, 20($sp)\n" + "lh $v1, 6($s0)\n" + "lh $v0, 136($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 10($s0)\n" + "lh $v0, 138($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 14($s0)\n" + "lh $v0, 140($s0)\n" + "nop\n" + "beq $v1, $v0, 3f\n" + "nop\n" + "1:\n" + "lw $v0, 68($s0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 2f\n" + "addiu $a0, $s0, 4\n" + "lui $a2, 0x1f80\n" + "ori $a2, $a2, 0x03fc\n" + "addu $t0, $a2, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "addu $a0, $s0, $zero\n" + "lui $at, %%hi(D_801A6B54)\n" + "sw $v0, %%lo(D_801A6B54)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "addiu $a0, $s0, 4\n" + "2:\n" + "jal func_80015978\n" + "addiu $a1, $s0, 136\n" + "3:\n" + "lw $ra, 20($sp)\n" + "lw $s0, 16($sp)\n" + "addiu $sp, $sp, 24\n" + ".set\treorder\n" + : : : "memory"); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) + + +void func_80150B28(int param_1) { + + extern s32 D_800AE6B0; + extern void (*D_80183C3C[])(void); + u32 idx; + register u32 sub __asm__("$2"); + + if ((D_800AE6B0 & 0x80FFFFFF) == 0) { + idx = *(u16 *)(param_1 + 0x16C); + if (idx != 0 && idx < 0x26) { + sub = idx - 1; + D_80183C3C[sub](); + } + } + *(u16 *)(param_1 + 0x16C) = 0; +} + + +void func_80150B9C(void) { +} + +DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ + + +DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ + + +DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ + + +DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ + + +DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ + + +DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ + + +DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ + + +DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ + + +DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ + + +DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ + + +DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ + + +DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ + + +DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ + + +DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ + + +DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ + + +DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ + + +DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ + + +DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ + + +DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ + + +DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ + + +DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ + + +void func_80150F78(void) { +} + +DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ + + +DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ + + +DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ + + +DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ + + +DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ + + +DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ + + +DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ + + +void func_801510B8(void) { +} + +void func_801510C0(void) { +} + +DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ + + +DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ + + +DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ + + +void func_80151130(void) { +} + +DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ + + +DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ + + +DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ + + +DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ + + +DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ + + +DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ + + +DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ + + +DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ + + +DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ + + +DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80151664); + +DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ + + +DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ + + +DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ + + +void func_80151878(void) { +} + +DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ + + +DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ + + +DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80151944); + +DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ + + +DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ + + +DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80151B98); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80151C54); + + + +void func_80151D24(void *a0) { + + extern void (*D_80183CE0[])(void); + D_80183CE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ + + +DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ + + +DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ + + +DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ + + +DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ + + +DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ + + + + +void func_80152058(void *a0) { + + extern void (*D_80183D04[])(void); + D_80183D04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); + +void func_801520DC(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_80183CF4; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_801472C8(arg0); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_80183CF4); + func_801477E8(arg0, 0x40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); + func_80147324(0x441); + func_80146CA0(arg0); +} + + +DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ + + +DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ + + +DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801470AC(s32 *a0); +extern void func_801472B4(void *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80153C18(); +void func_801522CC(s32 a0) { + s32 v1; + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + func_80154A74(a0, 0x11); + func_801553C0(a0); + func_801470AC((s32 *)a0); + func_801472B4((void *)a0); + v1 = *(s32 *)(a0 + 0x20); + *(s16 *)(a0 + 0x3E) = 0; + *(s16 *)(a0 + 0x40) = 0; + *(s16 *)(a0 + 0x42) = 0; + *(u8 *)(a0 + 0xDD) = 0; + *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; + *(s16 *)(v1 + 0x10) = 0; + *(u16 *)(a0 + 0x60) = 0x1000; + *(u16 *)(a0 + 0x62) = 0x1000; + *(u16 *)(a0 + 0x64) = 0x1000; + func_801477E8((s32 *)a0, 0); + func_80153C18(a0); +} + + + + +void func_80152370(void *a0) { + + extern void (*D_80183D18[])(void); + D_80183D18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (67 ins) + +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80019064(void *a0); +extern int func_80151204(int arg, int a1); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + + +void func_801523F4(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern s32 D_800D58AC; + extern u8 D_80183D24[]; + s32 pad[4]; + s32 buf[4]; + register s32 s0a __asm__("$16"); /* $s0 = buf */ + register s32 s2a __asm__("$18") = (s32)&D_80183D24; /* $s2 = &D_80183D24 */ + + ((void (*)(s32, s32))func_80146E90)(arg0, 0); + func_80019064(&D_80062C04); + ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); + if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), + (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); + } else { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); + } + func_80154A74(arg0, 0x16); + ((void (*)(s32))func_80149020)(arg0); + s0a = (s32)buf; + ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, + s2a, s0a); + ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); + ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); + func_80147324(0x451); + ((void (*)(s32))func_80146CA0)(arg0); + (void)pad; +} + + +DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ + + +DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ + + + + +void func_80152698(void *a0) { + + extern void (*D_80183D34[])(void); + D_80183D34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ + + +DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ + + +DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ + + + + +void func_8015282C(void *a0) { + + extern void (*D_80183D4C[])(void); + D_80183D4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_801528B0(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_80183D3C; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_80183D3C); + func_801477E8(arg0, 0xFFF00000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ + + +DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ + + +DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ + + +DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ + + + + +void func_80152B6C(void *a0) { + + extern void (*D_80183D60[])(void); + D_80183D60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ + + +DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ + + +DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ + + +DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ + + + + +void func_80152D24(void *a0) { + + extern void (*D_80183D7C[])(void); + D_80183D7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_80152DA8(s32 arg0) +{ + + extern s32 D_80062C14; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_80183D6C; + func_80019064(&D_80062C14); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + M2C_FIELD(arg0, s8 *, 0xDF) = 8; + func_80146DB8(arg0, &D_80183D6C); + func_801477E8(arg0, 0xFFE40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ + + +DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ + + +DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ + + +DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ + + + + +void func_80153060(void *a0) { + + extern void (*D_80183D90[])(void); + D_80183D90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ + + +DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ + + +DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ + + +DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ + + +DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ + + +DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ + + + + +void func_80153320(void *a0) { + + extern void (*D_80183DA4[])(void); + D_80183DA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ + + +DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ + + +DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ + + +DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ + + +DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ + + +DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ + + +extern void func_80146D90(s32 a0); +extern void func_8014CC28(s32 a0); +extern void func_8014ED28(s32 _arg0); +extern void func_8014FA04(s32 a0); + +s32 func_801535F4(void *arg0) { + s32 var_s1; + register u32 flags __asm__("$4"); + register u32 fcopy __asm__("$3"); + s32 ret; + + var_s1 = 0; + if (((s32 (*)(void))func_8014ED28)() != 0) { + func_80146D90((s32)arg0); + } + if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && + (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { + var_s1 = 1; + } + flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); + fcopy = flags; + if (flags & 0x4000) { + ret = 2; + } else if (flags & 0x2000) { + ret = 1; + } else { + ret = 4; + if ((fcopy & 0x8000) == 0) { + ret = var_s1; + } + } + __asm__ __volatile__("" : : "r"(flags)); + return ret; +} + + +DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ + + +DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ + + +DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ + + +DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ + + +DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ + + +DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ + + +DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ + + +DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ + + +DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ + + +DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ + + +DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ + + +DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ + + +DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ + + +DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ + + +DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls +extern void func_80019064(void *a0); + +void func_80153CCC(S80153CCC *a0) { + + extern s32 D_80183DB8; + extern void (*D_80183DE0[])(void *a0); + extern s16 D_8011DB0C; + extern u16 D_8011F748; + ((s32 (*)(s32))func_80019064)((s32)&D_80183DB8); + D_80183DE0[a0->idx](a0); + D_8011DB0C = 0; + D_8011F748 = 0; +} + + +DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (33/33) + +extern void func_80147324(s32 arg0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_80146CA0(void *a0); +extern s16 currentLocationId; + +void func_80153D7C(s32 param_1) +{ + + extern u8 D_80183DC0; + func_80147324(0x451); + func_80154274((s32 *)param_1, (s32)&D_80183DC0); + func_80149020((s32 *)param_1); + *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); + *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); + *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); + if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; + else *(u8 *)(param_1 + 0xde) = 10; + *(u8 *)(param_1 + 0xdf) = 0; + __asm__ __volatile__("" ::: "memory"); + func_80146CA0((void *)param_1); +} + + +DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ + + +DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ + + +DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ + + +DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ + + +DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ + + +DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ + + +DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ + + +DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ + + +DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ + + +DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ + + +DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ + + +DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ + + +DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8015444C); + +INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_801549F8); + +DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ + + +DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ + + +DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ + + +DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ + + +DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ + + +DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ + + +DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ + + +DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ + + +DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ + diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c index ee48ede5e..e3bdd22ae 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c @@ -1219,3762 +1219,3 @@ void func_8013FAF8(s16 arg0, s16 arg1) { INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8013FFD8); INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014032C); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80140608); - - -// @class: iv-combine -// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source -// pointer compile to fixed offsets when written base[0..n]; the target advances -// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead -// final increment, yielding the "increment N-2 then offset 0/2" tail). - - -extern s32 func_80028D58(void); -extern s32 func_80028DE0(void); -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); - -void func_801407F4(void) -{ - - extern u8 *D_8017F6D8; - extern u8 *D_8017F6DC; - extern u8 *D_8017F6E0; - extern u8 *D_8017F6E4; - extern u8 *D_8017F6E8; - extern u16 *D_8017F6EC[]; - extern u16 *D_8017F6F4[]; - extern u16 *D_8017F714[]; - u8 *puVar1; - s32 iVar2; - u16 *puVar3; - - puVar1 = D_8017F6D8; - iVar2 = func_80028D58(); - puVar3 = D_8017F6EC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - puVar1 = D_8017F6DC; - iVar2 = func_80028DE0(); - puVar3 = D_8017F6EC[iVar2]; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - - iVar2 = func_80028FBC(); - *(s16 *)(D_8017F6E0 + 0x18) = *D_8017F6F4[iVar2]; - iVar2 = func_80029000(); - *(s16 *)(D_8017F6E4 + 0x18) = *D_8017F6F4[iVar2]; - - puVar1 = D_8017F6E8; - iVar2 = func_80028D9C(); - puVar3 = D_8017F714[iVar2]; - *(s16 *)(puVar1 + 0x12) = *puVar3++; - *(s16 *)(puVar1 + 0x14) = *puVar3++; - *(s16 *)(puVar1 + 0x16) = *puVar3++; - *(s16 *)(puVar1 + 0x18) = *puVar3++; - *(s16 *)(puVar1 + 0x1a) = *puVar3++; - *(s16 *)(puVar1 + 0x1c) = *puVar3++; -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80140958); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80140D68); - - -// @class: struct -// @stuck: none — MATCH - - -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); - -void func_80140E6C(void) { - - extern unsigned char D_80078E7F; - extern unsigned char D_80078E7E; - extern unsigned char D_80078E7D; - extern M2C_UNK D_8017F614; - void *puVar1; - unsigned int uVar2; - unsigned int uVar3; - unsigned int uVar4; - - puVar1 = (*(void * *)&D_8017F614); - uVar2 = func_800D2CA8(D_80078E7F, 0x18); - uVar3 = func_800D2CA8(D_80078E7E, 0xc); - uVar4 = func_800D2CA8(D_80078E7D, 0); - func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (128/128 ins, match_one confirmed) - - -extern int func_80029FE4(void); -extern int func_800D2CA8(int, int); -extern void func_800D2D10(int, int, void *, int); -extern char *func_8002AAB4(void); -extern char *strcpy(char *, const char *); -extern int func_8002A26C(void); -extern int func_8002A2B0(void); -extern int func_8002A4B8(void); -extern s32 func_8002A4FC(s32 a0); -extern int func_8002A998(void); -extern int func_8002A9DC(void); -extern int func_8002A728(void); -extern int func_8002A76C(void); -extern int func_80029FD4(void); - -void func_80140F00(void) { - - extern short D_80115128; - extern u8 D_8017F624; - extern char *D_8017F644; - extern char *D_8017F648; - extern char *D_8017F64C; - extern char *D_8017F650; - extern char *D_8017F654; - char *p; - int r; - - if (D_80115128 == 0) { - p = (*(char * *)&D_8017F624); - r = func_800D2CA8(func_80029FE4() + 1, 0x18); - func_800D2D10(r, 2, p + 4, 1); - strcpy(p + 0xA, func_8002AAB4()); - - p = D_8017F644; - r = func_800D2CA8(func_8002A26C() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A2B0(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F648; - r = func_800D2CA8(func_8002A4B8() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F64C; - r = func_800D2CA8(func_8002A998() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A9DC(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F650; - r = func_800D2CA8(func_8002A728() + 1, 0x18); - func_800D2D10(r, 2, p + 0x12, 1); - r = func_800D2CA8(func_8002A76C(), 0x18); - func_800D2D10(r, 2, p + 0x22, -1); - - p = D_8017F654; - r = func_800D2CA8(func_80029FD4(), 4); - func_800D2D10(r, 7, p + 0x18, -1); - } -} - - - - -// @class: other -// @stuck: none — MATCH - - -extern s32 func_8002A1B4(void); -extern short func_8002A28C(void); -extern short func_8002A27C(void); -extern s32 func_8002A400(void); -extern short func_8002A4D8(void); -extern short func_8002A4C8(void); -extern s32 func_8002A8E0(void); -extern short func_8002A9B8(void); -extern short func_8002A9A8(void); -extern s32 func_8002A670(void); -extern short func_8002A748(void); -extern short func_8002A738(void); -extern int func_801412A8(int, int, int, int, int, int); - -int func_80141100(int param_1) -{ - - extern short D_80115128; - extern unsigned short D_80115172; - extern unsigned short D_8017F4DE; - extern unsigned short D_8017F4E2; - extern unsigned short D_8017F4E6; - extern unsigned short D_8017F4EA; - short sVar1; - int iVar7; - - if (D_80115128 == 0) { - iVar7 = D_80115172 + 0x31; - sVar1 = D_8017F4DE; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F4E2; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F4E6; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); - sVar1 = D_8017F4EA; - param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); - } - return param_1; -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801412A8); - -DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ - - -DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ - - -DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ - - - - -void func_80141788(void) -{ - - extern unsigned short D_80115112; - extern void (*D_8017FA74[])(void); - D_8017FA74[D_80115112](); -} - - -DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ - - -DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ - - - -extern void func_801754A8(void); -extern s32 func_80014ED4(s32); -extern s32 func_80015018(s32); -extern void func_80141C04(void); - - -void func_80141874(void) { - - extern u16 D_8011511E; - extern u16 D_8011511C; - extern unsigned short D_80115112; - extern u16 D_80115116; - extern void (*D_8017FA80[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ - func_801754A8(); - D_8011511E = func_80014ED4(0); - D_8011511C = func_80015018(0); - fp = D_8017FA80[D_80115112]; - fp(); - func_80141C04(); - D_80115116 += 1; -} - - - - - - - - - -extern u16 D_80115110; -extern u16 D_80115112; -extern unsigned short D_80115118; -extern volatile u16 D_8011511A; -extern s16 D_80115128; -extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ -extern s32 D_80115130; -extern u8 D_80115158[]; -extern u8 D_8011515C; - -extern void func_800D24A0(s32 a0); -extern s32 func_80029178(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80141C0C(s32 a0); - -void func_801418F8(void) -{ - - extern s16 D_8011515A; - extern s16 D_8011515E; - extern s16 D_80115162; - extern s16 D_80115166; - extern u8 D_8017F698; - extern u8 D_8017F6B0; - extern u8 D_8017F724; - extern u8 D_8017F72C; - extern s16 D_8017F9F8; - extern s16 D_8017F9FA; - extern void *D_8018F198; - extern void *D_8018F19C; - u16 t; - - func_800D24A0(1); - D_8011511A = 2; - t = D_8011511A; - (*(s16 *)&D_80115118) = 0; - D_80115130 = 0; - if (t >= 4) { - D_8011511A = t - 3; - } - (*(s16 *)D_80115158) = 0x106; - if ((func_80029178(0x1C) & 0xFF) == 0) { - D_8018F198 = &D_8017F698; - D_8018F19C = &D_8017F724; - } else { - D_8018F198 = &D_8017F6B0; - D_8018F19C = &D_8017F72C; - } - D_8011515A = 0x104; - (*(s16 *)&D_8011515C) = 0x104; - D_8011515E = 0x129; - D_80115162 = 0x103; - D_80115166 = 0x105; - D_80115128 = 0; - D_8011512E = 0; - if (D_80115110 == 3) { - func_8002D4C8(0x46E, 0); - } else { - func_80141C0C(0); - } - D_80115128 = 1; - D_8017F9F8 = 0xE; - D_8017F9FA = 3; - D_80115112 = D_80115112 + 1; -} - - -/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. - * - * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. - * D_8011511A: u16, unsigned compare vs 4 (sltiu). - * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). - * D_80115130: cached s32 handle. D_8017F9FC: address-taken arg to func_801376E8. - * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. - */ - -extern s16 D_800B9A02; -extern u8 D_801151C8[]; -extern s32 D_801151D0; -/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every - * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into - * one load (matches the single-load target). */ -extern s16 D_8011514C; -extern u8 D_8011515C; -extern s32 D_80115130; -extern u16 D_80115112; - -extern s32 func_8013F350(void); -extern void func_8013FAF8(s16 a0, s16 a1); -extern s32 func_8014032C(s32 a0, s32 a1); -extern void func_80139954(void); -extern void func_801376E8(int a0, int a1); -extern void func_80137B80(void); -extern s32 func_800D0EC4(void); - -void func_80141A60(void) -{ - - extern u8 D_8011514D; - extern u8 D_8017F9FC; - extern u16 D_80115116; - s32 iVar1; - s32 pad[2]; - (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ - - D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; - func_8013F350(); - if ((*(u16 *)&D_8011511A) >= 4) { - func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); - } - func_8013FAF8(2, 3); - iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); - if (iVar1 != 0 && iVar1 != D_80115130) { - D_80115130 = iVar1; - func_80139954(); - func_801376E8(iVar1, (int)&D_8017F9FC); - } - func_80137B80(); - iVar1 = func_800D0EC4(); - if (iVar1 != 0) { - D_80115116 = 0xfff8; - D_80115112 = D_80115112 + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80141B90); - -void func_80141C04(void) { -} - - -// @class: struct -// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) - -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80141C0C(s32 param_1) -{ - - extern u16 D_80115110; - extern u8 D_8017F9D4; - func_8002D4C8(*(u16 *)(&D_8017F9D4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); -} - - -DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ - - -DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ - - -DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ - - -DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity -// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on -// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); -// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier -// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the -// ==0 arm (matches the load2-reused-as-$v1 ordering). - -extern void func_8012C218(void *a0); - -void func_801424E4(short *param_1) { - - extern void (*D_8017FAA4[])(void); - short sVar1; - int iVar2; - register unsigned short t __asm__("$3"); - - (*D_8017FAA4[(unsigned short)param_1[1]])(); - if (*(unsigned short *)param_1 != 0) { - if (param_1[0x38] != 0) { - iVar2 = *(int *)(param_1 + 0x32); - if (iVar2 == 0) { - return; - } - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - t = (unsigned short)param_1[0x7e]; - sVar1 = *(unsigned short *)(iVar2 + 10) + t; - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - } else { - unsigned short a; - iVar2 = *(int *)(param_1 + 0x32); - if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { - *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); - a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); - __asm__ __volatile__("" : : "r"(a)); - t = (unsigned short)param_1[0x7e]; - sVar1 = a + t; - iVar2 = *(volatile int *)(param_1 + 0x32); - param_1[5] = sVar1; - *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); - return; - } - ((void (*)(short *))func_8012C218)(param_1); - } - } - return; -} - - - - -void func_801425CC(void *a0) { - - extern void (*D_8017FAB4[])(void); - D_8017FAB4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: schedule -// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail - -extern void func_8012C1B8(void); -extern s32 func_8012C1DC(s32 a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012CAE4(void *a0); -extern s32 func_8012AD50(void *a0); - -void func_80142608(s32 param_1) -{ - - extern s32 D_8017FA98; - register s32 iVar1 __asm__("$16"); - - if (*(short *)(param_1 + 0x70) != 0) { - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - } else { - iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); - } - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 != 0) { - func_8001CA1C(iVar1, (s32)&D_8017FA98); - *(short *)(iVar1 + 0x1a) = 0x200; - *(short *)(iVar1 + 0x18) = 0x200; - *(short *)(param_1 + 0xfc) = 0x40; - if (*(short *)(param_1 + 0x70) != 0) { - goto ad50; - } - if (*(s32 *)(param_1 + 100) != 0) { - *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); - goto ad50; - } - } - ((void (*)(s32))func_8012CAE4)(param_1); - return; -ad50: - *(short *)(param_1 + 0x98) = 0; - *(s32 *)(param_1 + 0x90) = 0; - ((void (*)(s32))func_8012AD50)(param_1); -} - - -DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ - - -DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ - - -DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ - - -void func_801427DC(void) { -} - -void func_801427E4(void) { -} - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801427EC(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8017FAC8[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8017FAC8[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80142838); - -DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_8014292C(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8017FAE4[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8017FAE4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_80142978(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8017FCB4[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8017FCB4[*(u16 *)(param_1 + 2)](); - } -} - - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - - -void func_801429C4(int param_1) -{ - - extern u16 D_801270C0; - extern void (*D_8017FD6C[])(); - if (*(s16 *)&D_801270C0 != 3) { - D_8017FD6C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80142A10); - - -// @class: struct -// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) - - -void func_80142A80(void) -{ - - extern u16 D_800B99D8; - extern struct packed_word D_8018E880; - extern u8 D_8018F1A0; - extern u8 D_8018F1A1; - extern u8 D_8018F1A2; - u16 flags; - union word_bytes local; - s32 mul; - - flags = D_800B99D8; - local.pw = D_8018E880; - - if (flags & 0x10) { - mul = (s8)((flags & 0xf) >> 1) + 9; - } else { - mul = 0x10 - (s8)((flags & 0xf) >> 1); - } - - D_8018F1A0 = mul * (local.b[0] >> 4); - D_8018F1A1 = mul * (local.b[1] >> 4); - D_8018F1A2 = mul * (local.b[2] >> 4); -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80142B2C); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80142BB4); - -void func_80142C7C(void) { -} - -DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ - - -DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ - - -DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ - - -DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142DC4(int param_1) -{ - - extern int D_8017FABC; - int v0; - - *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FABC); - *(short *)(v0 + 0x1a) = 0x1800; - *(short *)(v0 + 0x18) = 0x1800; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_80142B2C(void *arg0); - - -void func_80142E38(int param_1) -{ - - extern unsigned char D_8017FAD8[]; - short sVar1; - int iVar2; - - *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FAD8); - sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; - *(short *)(iVar2 + 0x1a) = sVar1; - *(short *)(iVar2 + 0x18) = sVar1; - *(short *)(param_1 + 0xfc) = 0; - ((void (*)(int))func_80142B2C)(param_1); - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_80142EC0(s32 param_1) { - - extern s32 D_8017FCA4[]; - register s32 d __asm__("$16") = param_1; /* $s0 */ - register s32 obj __asm__("$17"); /* $s1 */ - s32 ret; - s16 sVar2; - - ret = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(d + 0x20) = ret; - obj = ret; - if (ret == 0) { - ((void (*)(s32))func_8012CAE4)(d); - } else { - func_8001CA1C(obj, 0); - sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); - *(s16 *)(obj + 0x1a) = sVar2; - *(s16 *)(obj + 0x18) = sVar2; - *(s16 *)(d + 0xfc) = 0; - ((void (*)(s32, s32))func_8012A828)(d, D_8017FCA4[*(u16 *)(d + 0x70) & 0xf]); - ((void (*)(s32))func_80142B2C)(d); - } -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80142F68); - -DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result -// survives across func_8001CA1C while $v0 serves the pre-call store/test; -// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142B2C(void *arg0); - - -void func_8014305C(int param_1) -{ - - extern unsigned char D_8017FCC4[]; - extern unsigned char D_8017FD24[]; - register int s0_param __asm__("$16") = param_1; - register int s1_copy __asm__("$17"); - int iVar2; - short sVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(s0_param + 0x20) = iVar2; - s1_copy = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(s0_param); - } else { - ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017FCC4); - sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; - *(short *)(s1_copy + 0x1a) = sVar1; - *(short *)(s1_copy + 0x18) = sVar1; - *(short *)(s0_param + 0xfc) = 0; - func_8012A828(s0_param, D_8017FD24); - ((void (*)(int))func_80142B2C)(s0_param); - } -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801430F4); - -DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) - -extern void *memcpy(void *, const void *, u32); - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern s32 func_8012E504(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80142B2C(void *arg0); - - -void func_801431E8(s32 param_1) { - - extern u8 D_8018E87C; - extern u8 D_8018F1A0; - extern u8 D_8018F1A4; - u8 buf[8]; - s32 iVar5; - u16 uVar2; - s16 sVar4; - - register s32 d __asm__("$16"); - memcpy(buf, &D_8018E87C, 4); - iVar5 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar5; - d = iVar5; - if (iVar5 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - } else { - ((void (*)(s32, void *))func_8001CA88)(d, &D_8018F1A0); - uVar2 = *(u16 *)(param_1 + 0x70); - *(s16 *)(d + 0x76) = -0x10; - sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; - *(s16 *)(d + 0x1a) = sVar4; - *(s16 *)(d + 0x18) = sVar4; - *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; - if (func_8012E504(param_1, 0x33) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - func_800233CC(&D_8018F1A0, 0x10); - memcpy(&D_8018F1A4, buf, 4); - } else { - *(s16 *)(param_1 + 0xfc) = 0; - } - ((void (*)(s32))func_80142B2C)(param_1); - } -} - - -DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ - - -DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801433F0); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_80143458(s32 param_1) -{ - - extern u8 D_800D387C[]; - extern u32 D_8017FE7C[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017FE7C[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014350C); - - -// @class: plumbing -// @stuck: none — MATCH (pending gate) - - -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -void func_8014358C(s32 param_1) -{ - - extern u8 D_8017FE8C[]; - extern u32 D_8017FF88[]; - s32 p; - u16 v; - - *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_8017FE8C; - - p = *(s32 *)(param_1 + 0x20); - if (*(s32 *)(p + 4) == 0) { - *(s32 *)(p + 4) = 0x50000000; - } - - *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; - - v = *(u16 *)(param_1 + 0x34) & 0x7fff; - if (v != 0) { - p = *(s32 *)(param_1 + 0x20); - *(u16 *)(p + 0x1a) = v; - *(u16 *)(p + 0x18) = v; - } - - func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, - D_8017FF88[*(u16 *)(param_1 + 0x34) & 3]); - - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ - - -DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ - - -DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ - - -DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ - - -DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ - - -DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ - - - - -void func_80143B30(void *a0) { - - extern void (*D_8017FFA4[])(void); - D_8017FFA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ - - -DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ - - - - -void func_80143C38(void *a0) { - - extern void (*D_8017FFB0[])(void); - D_8017FFB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ - - - - -void func_80143C98(void *a0) { - - extern void (*D_8017FFB8[])(void); - D_8017FFB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80143D28); - - - -void func_80143E68(void *a0) { - - extern void (*D_80180000[])(void); - D_80180000[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80143EA4(void) { -} - -void func_80143EAC(void) { -} - -void func_80143EB4(void) { -} - -DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ - - - - -void func_80144054(void *a0) { - - extern void (*D_80180014[])(void); - D_80180014[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80144090); - -extern void func_8012C218(void *a0); - -// @class: struct -// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) - - -void func_801442F8(int param_1) -{ - - extern void (*D_8018001C[])(); - int iVar1; - - D_8018001C[*(u16 *)(param_1 + 2)](); - iVar1 = *(int *)(param_1 + 0x1c) + 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (0x1d < iVar1) { - func_8012C218(param_1); - } -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -void func_80144364(int param_1) { - - extern u8 D_8017FF98; - int iVar3; - u16 uVar2; - s16 sVar1; - - iVar3 = ((s32 (*)(void))func_8012C194)(); - if (iVar3 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); - *(int *)(param_1 + 0xCC) = iVar3; - *(u16 *)(param_1 + 0xFC) = uVar2; - func_8001CB6C((u8 *)iVar3, (s32)&D_8017FF98, 0x250, 0x1A0); - *(s32 *)(iVar3 + 4) = 0x60000000; - *(u8 *)(iVar3 + 0x27) = 0x14; - *(u16 *)(iVar3 + 0x10) = 0x400; - *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); - *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); - *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); - sVar1 = *(s16 *)(param_1 + 0x70); - if (sVar1 != 0) { - *(s16 *)(iVar3 + 0x1A) = sVar1; - *(s16 *)(iVar3 + 0x18) = sVar1; - } else { - *(u16 *)(iVar3 + 0x1A) = 0x2000; - *(u16 *)(iVar3 + 0x18) = 0x2000; - } - *(u16 *)(param_1 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80144458); - -DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014462C); - -DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CA1C(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); - -void func_8014477C(void *param_1) { - - extern u8 D_8017FFC0; - extern u8 D_8017FFCC; - s32 v0; - s32 v1; - register s32 uVar2 __asm__("$2"); - register s32 addr __asm__("$3"); - s32 gv; - s32 fv; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FFC0); - if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { - *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); - uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); - if (uVar2 != 0) { - addr = uVar2 & 0xFFFFFFF; - gv = *(u16 *)((addr | 0x80000000) + 8); - fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; - *(u16 *)((s32)param_1 + 0xA) = gv + fv; - } else { - *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; - } - } - ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FFCC); - v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; - *(s16 *)((s32)param_1 + 0x2) = 1; - *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; - *(s32 *)((s32)param_1 + 0x1C) = 0x78; -} - - - -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - - -void func_80144880(s32 param_1) -{ - - extern u8 D_8017FF98; - extern u8 D_80180008; - register s32 obj __asm__("$16"); /* $s0 */ - register s32 self __asm__("$17") = param_1; /* $s1 */ - register s32 b __asm__("$2"); /* $v0 */ - s32 e; - - obj = ((s32 (*)(void))func_8012C194)(); - if (obj == 0) { - ((void (*)(s32))func_8012CAE4)(self); - } else { - *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); - *(s32 *)(self + 0xCC) = obj; - if (*(s16 *)(self + 0x70) == 1) { - func_8001CB6C((u8 *)obj, (s32)&D_8017FF98, 0x250, 0x1A0); - b = 0x14; - } else { - func_8001CB6C((u8 *)obj, (s32)&D_80180008, 0x300, 0x1D0); - b = 0x6A; - } - *(u8 *)(obj + 0x27) = (u8)b; - *(s32 *)(obj + 4) = 0x60000000; - *(u16 *)(obj + 0x10) = 0x400; - *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); - e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); - *(u16 *)(obj + 0x1A) = 0x4000; - *(u16 *)(obj + 0x18) = 0x4000; - *(u16 *)(obj + 0xC) = (u16)e; - *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; - } -} - - -DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ - - - - -void func_801449C8(void *a0) { - - extern void (*D_80180024[])(void); - D_80180024[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ - - - - -void func_80144A2C(void *a0) { - - extern void (*D_8018002C[])(void); - D_8018002C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ - - -void func_80144A90(void) { -} - -DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ - - -DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80144B14); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80144B9C); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801457A4); - -void func_801458E0(void) { -} - -DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80180BB8 block defeats the tail-merge of the two identical D_80180BB8 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145934(void) { - - extern u8 D_80180BB8; - extern u8 D_80180B28; - extern u8 D_80180B04; - extern u8 D_80180AE0; - extern u8 D_80180B94; - extern u8 D_80180B70; - extern u8 D_80180B4C; - extern u8 D_80180ABC; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_80180BB8; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80180BB8 load from being - * tail-merged with the v>=0x384 D_80180BB8 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_80180B28; - } else if (v >= 0x578) { - p = &D_80180B04; - } else if (v >= 0x514) { - p = &D_80180AE0; - } else if (v >= 0x384) { - p = &D_80180BB8; - } else if (v >= 0x258) { - p = &D_80180B94; - } else if (v >= 0xC8) { - p = &D_80180B70; - } else if (v >= 0xA) { - p = &D_80180B4C; - } else { - p = &D_80180ABC; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80180C48 block defeats the tail-merge of the two identical D_80180C48 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145A2C(void) { - - extern u8 D_80180C48; - extern u8 D_80180B28; - extern u8 D_80180B04; - extern u8 D_80180AE0; - extern u8 D_80180C24; - extern u8 D_80180C00; - extern u8 D_80180BDC; - extern u8 D_80180ABC; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_80180C48; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80180C48 load from being - * tail-merged with the v>=0x384 D_80180C48 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_80180B28; - } else if (v >= 0x578) { - p = &D_80180B04; - } else if (v >= 0x514) { - p = &D_80180AE0; - } else if (v >= 0x384) { - p = &D_80180C48; - } else if (v >= 0x258) { - p = &D_80180C24; - } else if (v >= 0xC8) { - p = &D_80180C00; - } else if (v >= 0xA) { - p = &D_80180BDC; - } else { - p = &D_80180ABC; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - -DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ - - -DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ - - -DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80145CEC); - - - -// @class: schedule -// @stuck: branch layout — 3-way dispatch on param_1; trying switch form - -extern s32 func_80029178(s32 arg); -extern void func_80146014(s32 a0); - - -void func_80145EE8(s32 param_1) -{ - - extern unsigned char D_80180040[]; - extern unsigned char D_80180070[]; - extern unsigned char D_801800C0[]; - extern unsigned char D_801800F0[]; - extern unsigned char D_80180120[]; - switch (param_1) { - case 0: - if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { - ((void (*)(void *))func_80146014)(D_80180040); - } - if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { - ((void (*)(void *))func_80146014)(D_80180070); - } - if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { - ((void (*)(void *))func_80146014)(D_801800C0); - } - if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { - ((void (*)(void *))func_80146014)(D_801800F0); - } - if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { - return; - } - ((void (*)(void *))func_80146014)(D_80180120); - break; - case 1: - ((void (*)(void *))func_80146014)(D_80180040); - ((void (*)(void *))func_80146014)(D_80180070); - ((void (*)(void *))func_80146014)(D_801800C0); - ((void (*)(void *))func_80146014)(D_801800F0); - ((void (*)(void *))func_80146014)(D_80180120); - break; - } -} - - -DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ - - -void func_80146074(void) { -} - - -extern s32 func_80146128(void); -extern void func_80146360(void); -extern void func_801463A0(void); - -void func_8014607C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146128\n" - "lui $at, %%hi(D_8018F1E0)\n" - "sw $v0, %%lo(D_8018F1E0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8018F1E0)\n" - "lw $v0, %%lo(D_8018F1E0)($v0)\n" - "nop\n" - "beqz $v0, .L80146114\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146360\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_801463A0\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - ".L80146114:\n" - "nop\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (fnptr-table idiom: D_80180170[u8 idx](&arg)) - -void func_80146360(void) -{ - - extern void (*D_80180170[])(void *); - extern u8 D_80126BA4; - extern s32 D_80126B58; - D_80180170[D_80126BA4](&D_80126B58); -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801463A0); - -DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ - - -DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ - - -DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ - - -DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ - - -DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ - - -DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ - - -DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ - - -DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801466F0); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80146750); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014680C); - -DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ - - -DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ - - -DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ - - -DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80146A6C); - -DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80146AFC); - -DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ - - -DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ - - -DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ - - -DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ - - -DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ - - -DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ - - -DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ - - -DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ - - -DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ - - -DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ - - -DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ - - -DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ - - -DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ - - -DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ - - -DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80146F58); - -DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ - - -DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ - - -DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ - - -DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ - - -DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ - - -DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ - - -DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ - - -DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ - - -DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ - - -DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ - - -DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ - - -DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ - - -DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ - - -DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ - - -DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ - - -DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ - - -DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ - - -DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ - - -DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ - - -DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ - - -DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ - - -DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80147364); - -DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ - - -DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ - - -DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ - - -DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ - - -DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ - - -DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ - - -DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ - - -DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ - - -DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ - - -DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ - - -DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ - - -DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ - - -DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ - - -DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ - - -DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ - - -DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ - - -DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ - - -DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ - - -DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ - - -DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ - - -DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ - - -DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ - - -DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ - - -DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ - - -DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ - - -DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ - - -DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ - - -DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ - - -DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ - - -DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ - - -DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ - - -DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ - - -DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ - - -DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ - - -DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ - - -DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801483E8); - -DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ - - -DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ - - -DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ - - -DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ - - -DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ - - -DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ - - -DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ - - -DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ - - -DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ - - -DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ - - -DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ - - -DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ - - -DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ - - -DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ - - -DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ - - -DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ - - -DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ - - -DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg - -extern s32 ratan2(s32 a0, s32 a1); - -int func_80148AFC(void *a0) { - - extern s32 D_801151D4; - extern ActorFn D_80180178[]; - s32 p = (s32)a0; - s32 iVar5 = *(s32 *)(p + 0x20); - register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 sVar3; - u8 bVar1; - __asm__("" : "=r"(tmp) : "0"(tmp)); - sVar3 = tmp; - bVar1 = *(u8 *)(p + 0xA9); - - switch (bVar1) { - case 0x41: - return D_80180178[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; - case 0x53: - case 0x73: - { - register u32 bb __asm__("$3"); - register s32 c80 __asm__("$2") = 0x80; - register s32 lo __asm__("$4"); - register s32 hi __asm__("$2"); - bb = *(u16 *)(p + 0xAE); - lo = bb & 0xFF; - if (lo != c80 || (hi = bb >> 8) != 0x80) { - s32 sVar4; - __asm__ __volatile__("" : : : "memory"); - sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); - *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; - return 1; - } - return 0; - } - } -} - - -DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ - - -DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ - - -DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ - - -DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ - - -DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ - - -DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ - - -DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ - - -DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ - - -DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ - - -DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ - - -DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ - - -DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ - - -DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ - - -DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ - - -DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ - - -DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (68 ins) -extern s32 ratan2(s32 a0, s32 a1); - -s32 func_80148D44(void) { - - extern s32 D_801151D4; - extern u8 D_80126C01; - extern u16 D_80126C02; - extern u16 D_80126C06; - extern s32 D_801801B8[]; - register s32 ang __asm__("$16"); - register s32 a __asm__("$4"); - s32 p; - s32 res; - s32 d; - - p = D_801151D4; - a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), - *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; - d = (s32)D_80126C01; - __asm__ __volatile__("" : : "r"(a)); - ang = a; - if (d == 0x53) { - goto final; - } - if (d < 0x54) { - if (d == 0x41) { - goto call; - } - return 0x41; - } - if (d != 0x73) { - return 0x73; - } - goto final; -call: - return (s32)(s16)((s16 (*)())(D_801801B8[D_80126C02 >> 0xc]))(); -final: - { - u32 e = D_80126C06; - if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { - return -1; - } - __asm__ __volatile__("" : : : "memory"); - res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; - } - return res; -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80148E54); - -DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ - - -DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ - - -DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ - - -DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ - - -DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ - - -DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ - - -DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ - - -DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ - - -DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ - - -DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ - - -DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ - - -DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ - - -DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ - - -DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ - - -DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ - - -DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ - - -DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ - - -DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ - - -DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ - - -DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ - - -DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ - - -DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ - - -DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ - - -DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ - - -DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ - - -DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ - - -DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ - - -DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ - - -DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ - - -DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ - - -DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ - - -DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ - - -DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80149350); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80149374); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801493D0); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014942C); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80149450); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801494CC); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80149544); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80149584); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801495C4); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014964C); - -DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ - - -DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ - - -DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ - - -DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ - - -DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801497A8); - -DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ - - -DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ - - -DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ - - -DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80149954); - -DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ - - -DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ - - -DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ - - -DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ - - -DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ - - -DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ - - -DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ - - -DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ - - -DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ - - -DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ - - -DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ - - -DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ - - -DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ - - -DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ - - -DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80149F2C); - -void func_80149FA8(void) { -} - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins) -extern s16 currentLocationId; - -s32 func_80149FB0(s32 a0) { - - extern s32 D_80180238[]; - extern u8 D_80078E78[]; - s32 *p = &D_80180238[0]; - register s32 v __asm__("$3") = *p; - u8 *q = &D_80078E78[0]; - s32 loc; - - if (v != 0) { - loc = currentLocationId; - p = p + 1; - do { - if (loc == v) { - goto ret0; - } - v = *p; - p = p + 1; - } while (v != 0); - } - - if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { - return 0; - } - if (*(s16 *)(a0 + 0x1C8) != 0) { - return 0; - } - if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { - ret0: - return 0; - } - v = q[0x48]; - q[0x48] = v ^ 0x80; - return 1; -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014A048); - -DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ - - -DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ - - -DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ - - -DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ - - -DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ - - -DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ - - -DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ - - -DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ - - -DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014A51C); - -DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ - - -DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ - - -DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ - - -DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ - - -DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ - - -DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ - - -DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ - - -DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014A738); - -DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ - - -DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ - - -DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ - - -DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ - - -DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ - - -DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ - - -DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ - - -DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ - - -DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ - - -DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ - - -DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ - - -DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ - - -DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ - - -DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ - -DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ - - -DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ - - -DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ - - -DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ - - -DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ - - -DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ - - -DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ - - -DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ - - -DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ - - -DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ - - -DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ - - -DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ - - -DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ - - -DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ - - -DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ - - -DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ - - -DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ - - -DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ - - -DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ - - -DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ - - -DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ - - -DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ - - -DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ - - -DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ - - -DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ - - -DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ - - -DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ - - -DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ - - -DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ - - -DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ - - -DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ - - -DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ - - -DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ - - -DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ - - -DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ - - -DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ - - -DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ - - -void func_8014BDE0(void) { -} - -DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ - - -DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ - - -DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ - - -DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ - - -DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ - - -DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ - - -DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ - - -DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ - - -DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ - - -DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ - - -DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ - - -DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ - - -DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ - - -DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ - - -DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ - - -DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ - - -DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ - - -DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014C1A0); - -DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ - - -DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ - - -DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ - - -DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ - - -DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ - - -DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ - - -DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014C4AC); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014C568); - -DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ - - - -extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); - -s16 func_8014C5D0(s32 a0, s32 a1) { - - extern u8 D_801802C8; - return func_8014C5FC(a0, a1, &D_801802C8); -} - - -DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ - - -DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ - - -DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ - - -DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ - - -DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014C6F4); - -DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ - - -DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ - - -DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ - - -DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ - - -DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ - - -DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ - - -DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ - - -DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ - - -DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ - - -DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ - - -DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ - - -DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ - - -DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ - - -DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ - - -DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ - - -DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ - - -DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ - - -DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ - - -DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ - - -DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ - - -DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ - - -DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ - - -DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ - - -DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014CBE8); - -DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ - - -DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ - - - -extern void func_8014CD0C(u8 *a0); - -void func_8014CCB4(void) -{ - - extern int D_8018F1E8; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014CD0C\n" - "lui $at, %%hi(D_8018F1E8)\n" - "sw $v0, %%lo(D_8018F1E8)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8018F1E8)\n" - "lw $v0, %%lo(D_8018F1E8)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014CD80); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014CF04); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D04C); - -DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D12C); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D2A0); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D3E0); - -DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D4C0); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D610); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D738); - -DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014D820); - -DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ - - -DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014DF3C); - -DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ - - -DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ - - -DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014E434); - -DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ - - -DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014E5B4); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014E6A0); - -DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ - - -DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ - - -DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014E934); - -DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ - - -DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014ED28); - -DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ - - -DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014F1F4); - -DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ - - -DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014F3E8); - - -extern void func_8014F4C0(u8 *a0); - -void func_8014F468(void) -{ - - extern int D_8018F1EC; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F4C0\n" - "lui $at, %%hi(D_8018F1EC)\n" - "sw $v0, %%lo(D_8018F1EC)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8018F1EC)\n" - "lw $v0, %%lo(D_8018F1EC)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014F4C0); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014F6F4); - -DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ - - - -// @class: other -// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_8018F1EC; maspsx auto-fills jal delay slot) - -extern s32 func_8014FA70(s32 a0); - -void func_8014FA04(s32 a0) -{ - - extern s32 D_8018F1EC; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "sw $ra, 16($sp)\n" - "lw $v0, 68($a0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 1f\n" - "addu $v0, $zero, $zero\n" - "lui $a1, 0x1f80\n" - "ori $a1, $a1, 0x03fc\n" - "addu $t0, $a1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "lui $at, %%hi(D_8018F1EC)\n" - "sw $v0, %%lo(D_8018F1EC)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8018F1EC)\n" - "lw $v0, %%lo(D_8018F1EC)($v0)\n" - "1:\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014FBC0); - -DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014FCFC); - -DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ - - -DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014FE60); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8014FFDC); - -DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ - - -DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801502EC); - -DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80150480); - -DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ - - -DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ - - -DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801506A4); - -DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ - - -DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ - - -DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ - - -DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ - - - -extern s32 func_80021174(s32 a0, s32 a1); - -s32 func_8015094C(s32 param_1) { - - extern S16 D_8018E884; - extern s32 D_801802F8; - extern s32 D_80126990; - extern s32 D_80126994; - extern u8 D_80126948[]; - struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ - S16 local; /* 0x10 @ 0x40 */ - s32 pad1[4]; /* 0x10 @ 0x50 */ - register u8 *cam __asm__("$17") = D_80126948; - s32 ret; - - local = D_8018E884; - arg.x = *(short *)(param_1 + 6); - arg.mid = D_80126994; - arg.y = *(short *)(param_1 + 0xe); - ret = func_80021174(D_801802F8, (s32)&arg); - if (ret == 0) { - { - short cur = *(short *)(param_1 + 6); - s32 diff = D_80126990 - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - { - short cur = *(short *)(param_1 + 0xe); - s32 diff = *(s32 *)(cam + 0x50) - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - (void)&pad1; - return 1; - } - return 0; -} - - - -extern s32 func_8014FA70(s32 a0); -extern void func_80015978(s32 a0, s32 *a1); - -void func_80150A70(s32 a0) -{ - - extern s32 D_8018F1EC; - __asm__ __volatile__( - ".set\tnoreorder\n" - "addiu $sp, $sp, -24\n" - "sw $s0, 16($sp)\n" - "addu $s0, $a0, $zero\n" - "sw $ra, 20($sp)\n" - "lh $v1, 6($s0)\n" - "lh $v0, 136($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 10($s0)\n" - "lh $v0, 138($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 14($s0)\n" - "lh $v0, 140($s0)\n" - "nop\n" - "beq $v1, $v0, 3f\n" - "nop\n" - "1:\n" - "lw $v0, 68($s0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 2f\n" - "addiu $a0, $s0, 4\n" - "lui $a2, 0x1f80\n" - "ori $a2, $a2, 0x03fc\n" - "addu $t0, $a2, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "addu $a0, $s0, $zero\n" - "lui $at, %%hi(D_8018F1EC)\n" - "sw $v0, %%lo(D_8018F1EC)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "addiu $a0, $s0, 4\n" - "2:\n" - "jal func_80015978\n" - "addiu $a1, $s0, 136\n" - "3:\n" - "lw $ra, 20($sp)\n" - "lw $s0, 16($sp)\n" - "addiu $sp, $sp, 24\n" - ".set\treorder\n" - : : : "memory"); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) - - -void func_80150B28(int param_1) { - - extern s32 D_800AE6B0; - extern void (*D_801802FC[])(void); - u32 idx; - register u32 sub __asm__("$2"); - - if ((D_800AE6B0 & 0x80FFFFFF) == 0) { - idx = *(u16 *)(param_1 + 0x16C); - if (idx != 0 && idx < 0x26) { - sub = idx - 1; - D_801802FC[sub](); - } - } - *(u16 *)(param_1 + 0x16C) = 0; -} - - -void func_80150B9C(void) { -} - -DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ - - -DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ - - -DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ - - -DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ - - -DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ - - -DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ - - -DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ - - -DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ - - -DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ - - -DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ - - -DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ - - -DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ - - -DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ - - -DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ - - -DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ - - -DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ - - -DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ - - -DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ - - -DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ - - -DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ - - -DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ - - -void func_80150F78(void) { -} - -DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ - - -DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ - - -DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ - - -DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ - - -DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ - - -DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ - - -DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ - - -void func_801510B8(void) { -} - -void func_801510C0(void) { -} - -DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ - - -DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ - - -DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ - - -void func_80151130(void) { -} - -DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ - - -DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ - - -DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ - - -DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ - - -DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ - - -DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ - - -DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ - - -DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ - - -DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ - - -DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80151664); - -DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ - - -DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ - - -DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ - - -void func_80151878(void) { -} - -DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ - - -DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ - - -DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80151944); - -DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ - - -DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ - - -DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80151B98); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80151C54); - - - -void func_80151D24(void *a0) { - - extern void (*D_801803A0[])(void); - D_801803A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ - - -DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ - - -DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ - - -DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ - - -DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ - - -DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ - - - - -void func_80152058(void *a0) { - - extern void (*D_801803C4[])(void); - D_801803C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); - -void func_801520DC(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_801803B4; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_801472C8(arg0); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_801803B4); - func_801477E8(arg0, 0x40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); - func_80147324(0x441); - func_80146CA0(arg0); -} - - -DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ - - -DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ - - -DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801470AC(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80153C18(); -void func_801522CC(s32 a0) { - s32 v1; - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - func_80154A74(a0, 0x11); - func_801553C0(a0); - func_801470AC((s32 *)a0); - func_801472B4((void *)a0); - v1 = *(s32 *)(a0 + 0x20); - *(s16 *)(a0 + 0x3E) = 0; - *(s16 *)(a0 + 0x40) = 0; - *(s16 *)(a0 + 0x42) = 0; - *(u8 *)(a0 + 0xDD) = 0; - *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; - *(s16 *)(v1 + 0x10) = 0; - *(u16 *)(a0 + 0x60) = 0x1000; - *(u16 *)(a0 + 0x62) = 0x1000; - *(u16 *)(a0 + 0x64) = 0x1000; - func_801477E8((s32 *)a0, 0); - func_80153C18(a0); -} - - - - -void func_80152370(void *a0) { - - extern void (*D_801803D8[])(void); - D_801803D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (67 ins) - -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80019064(void *a0); -extern int func_80151204(int arg, int a1); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - - -void func_801523F4(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern s32 D_800D58AC; - extern u8 D_801803E4[]; - s32 pad[4]; - s32 buf[4]; - register s32 s0a __asm__("$16"); /* $s0 = buf */ - register s32 s2a __asm__("$18") = (s32)&D_801803E4; /* $s2 = &D_801803E4 */ - - ((void (*)(s32, s32))func_80146E90)(arg0, 0); - func_80019064(&D_80062C04); - ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); - if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), - (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); - } else { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); - } - func_80154A74(arg0, 0x16); - ((void (*)(s32))func_80149020)(arg0); - s0a = (s32)buf; - ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, - s2a, s0a); - ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); - ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); - func_80147324(0x451); - ((void (*)(s32))func_80146CA0)(arg0); - (void)pad; -} - - -DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ - - -DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ - - - - -void func_80152698(void *a0) { - - extern void (*D_801803F4[])(void); - D_801803F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ - - -DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ - - -DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ - - - - -void func_8015282C(void *a0) { - - extern void (*D_8018040C[])(void); - D_8018040C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_801528B0(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_801803FC; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_801803FC); - func_801477E8(arg0, 0xFFF00000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ - - -DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ - - -DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ - - -DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ - - - - -void func_80152B6C(void *a0) { - - extern void (*D_80180420[])(void); - D_80180420[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ - - -DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ - - -DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ - - -DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ - - - - -void func_80152D24(void *a0) { - - extern void (*D_8018043C[])(void); - D_8018043C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_80152DA8(s32 arg0) -{ - - extern s32 D_80062C14; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_8018042C; - func_80019064(&D_80062C14); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - M2C_FIELD(arg0, s8 *, 0xDF) = 8; - func_80146DB8(arg0, &D_8018042C); - func_801477E8(arg0, 0xFFE40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ - - -DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ - - -DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ - - -DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ - - - - -void func_80153060(void *a0) { - - extern void (*D_80180450[])(void); - D_80180450[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ - - -DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ - - -DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ - - -DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ - - -DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ - - -DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ - - - - -void func_80153320(void *a0) { - - extern void (*D_80180464[])(void); - D_80180464[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ - - -DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ - - -DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ - - -DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ - - -DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ - - -DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ - - -extern void func_80146D90(s32 a0); -extern void func_8014CC28(s32 a0); -extern void func_8014ED28(s32 _arg0); -extern void func_8014FA04(s32 a0); - -s32 func_801535F4(void *arg0) { - s32 var_s1; - register u32 flags __asm__("$4"); - register u32 fcopy __asm__("$3"); - s32 ret; - - var_s1 = 0; - if (((s32 (*)(void))func_8014ED28)() != 0) { - func_80146D90((s32)arg0); - } - if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && - (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { - var_s1 = 1; - } - flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); - fcopy = flags; - if (flags & 0x4000) { - ret = 2; - } else if (flags & 0x2000) { - ret = 1; - } else { - ret = 4; - if ((fcopy & 0x8000) == 0) { - ret = var_s1; - } - } - __asm__ __volatile__("" : : "r"(flags)); - return ret; -} - - -DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ - - -DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ - - -DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ - - -DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ - - -DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ - - -DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ - - -DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ - - -DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ - - -DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ - - -DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ - - -DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ - - -DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ - - -DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ - - -DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ - - -DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls -extern void func_80019064(void *a0); - -void func_80153CCC(S80153CCC *a0) { - - extern s32 D_80180478; - extern void (*D_801804A0[])(void *a0); - extern s16 D_8011DB0C; - extern u16 D_8011F748; - ((s32 (*)(s32))func_80019064)((s32)&D_80180478); - D_801804A0[a0->idx](a0); - D_8011DB0C = 0; - D_8011F748 = 0; -} - - -DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (33/33) - -extern void func_80147324(s32 arg0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_80146CA0(void *a0); -extern s16 currentLocationId; - -void func_80153D7C(s32 param_1) -{ - - extern u8 D_80180480; - func_80147324(0x451); - func_80154274((s32 *)param_1, (s32)&D_80180480); - func_80149020((s32 *)param_1); - *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); - *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); - *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); - if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; - else *(u8 *)(param_1 + 0xde) = 10; - *(u8 *)(param_1 + 0xdf) = 0; - __asm__ __volatile__("" ::: "memory"); - func_80146CA0((void *)param_1); -} - - -DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ - - -DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ - - -DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ - - -DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ - - -DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ - - -DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ - - -DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ - - -DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ - - -DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ - - -DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ - - -DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ - - -DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ - - -DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801549F8); - -DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ - - -DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ - - -DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ - - -DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ - - -DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ - - -DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ - - -DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ - - -DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ - - -DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ diff --git a/src/ov_SC07_011/ov_SC07_011_jr_80140608.c b/src/ov_SC07_011/ov_SC07_011_jr_80140608.c new file mode 100644 index 000000000..0b1af5000 --- /dev/null +++ b/src/ov_SC07_011/ov_SC07_011_jr_80140608.c @@ -0,0 +1,4663 @@ +#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 { s32 w[8]; } Vec8; +typedef struct { s32 m[3][3]; s32 t[3]; } MATRIX; +typedef struct { s32 vx, vy, vz; } VECTOR; +typedef struct { s16 h[8]; } Buf; +typedef struct { char _b[8]; } M8; /* size 8, alignment 1 -> unaligned copy */ +typedef struct { u16 f0, f2, f4; s16 f6; } Box_80133784; +typedef struct { s16 x, y, z; } Vec3s; +typedef struct { s32 f0; } E4; +typedef struct { u16 f0; s16 f2; } Prim4; +typedef struct { s16 x; s16 y; } Hw4; +typedef struct { s32 f0; u32 *f4; s32 f8; s32 fC; s32 f10; } Rec20; +typedef struct { u8 d[0x60]; } Blk60; +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(void); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_8014ED28(s32 _arg0); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern void func_80129010(void); +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern u8 D_80126948[]; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_80129CF8(void); +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern void func_8012A464(void); +extern s32 D_801151D4; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 D_80126B58; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern void func_8012CC88(s32 a, s32 b, s32 c); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC88(s32 a0, s32 a1, s32 a2); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(void); +extern void func_8012E138(void); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern s32 func_8012E778(int param_1, int param_2); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_80130D0C(s32 a0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_80131E00(); +extern s32 D_8018F078; +extern s32 D_8018F07C; +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_801345F8(s32 arg); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_801379FC(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 D_80127548[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s16 D_801269F4; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_80019064(void *a0); +extern void func_8013C9C4(void * arg0); +extern void func_8013CA14(void); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern void func_8013D9B0(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern void func_8013D330(void); +extern void func_8013D53C(void); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_800190AC(void); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511A; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical (§8e) */ +extern u8 D_8011515C; /* macro-canonical (§8e) */ +extern u8 D_8017F71C[]; +extern u8 D_8017F734[]; +extern u16 D_8017F638[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +/* ==== end §8b carried decl layer ==== */ + +#include "common.h" + +extern u8 D_80115148[]; +extern u16 D_8011511E; +extern u8 D_80062BDC; + +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern void func_80019064(void *a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +s32 func_80140608(s32 a0) { + s16 t; + register s32 iVar2 __asm__("$2"); + register s32 zr __asm__("$0"); + s32 uVar3; + u32 uVar4; + s32 uVar5 = 1; + + switch (D_80115148[(s16)a0 * 2]) { + case 0: + t = func_80028D58() ^ 1; + func_80028D78(t); + if (t != 0) { + return uVar5; + } + func_80019064(&D_80062BDC); + return uVar5; + case 1: + func_80028E00((s16)(func_80028DE0() ^ 1)); + return uVar5; + case 2: + iVar2 = func_80028FBC(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80028FDC((s16)uVar4); + func_8002D4C8(0x21, uVar4 & 0xFFFF); + goto ret; + case 3: + iVar2 = func_80029000(); + if (D_8011511E & 0x8000) { + iVar2 = iVar2 - 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 < 0) { + uVar4 = 0; + uVar5 = 0; + } + } else { + iVar2 = iVar2 + 1; + uVar4 = iVar2 + zr; + if ((s16)iVar2 >= 8) { + uVar4 = 7; + uVar5 = 0; + } + } + func_80029020((s16)uVar4); + func_8002D4C8(0x22, uVar4 & 0xFFFF); + goto ret; + case 4: + t = func_80028D9C() ^ 1; + func_80028DBC(t); + uVar3 = 0xB; + if (t == 0) { + uVar3 = 0xC; + } + func_8002D4C8(uVar3, 0); + goto ret; + default: + goto ret; + } +ret: + return uVar5; +} + + + +// @class: iv-combine +// @stuck: none — MATCH (89 ins). Sequential struct fields fed from a running source +// pointer compile to fixed offsets when written base[0..n]; the target advances +// the pointer, so use post-increment `*p++` for EVERY field (gcc drops the dead +// final increment, yielding the "increment N-2 then offset 0/2" tail). + + +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); + +void func_801407F4(void) +{ + + extern u8 *D_8017F6D8; + extern u8 *D_8017F6DC; + extern u8 *D_8017F6E0; + extern u8 *D_8017F6E4; + extern u8 *D_8017F6E8; + extern u16 *D_8017F6EC[]; + extern u16 *D_8017F6F4[]; + extern u16 *D_8017F714[]; + u8 *puVar1; + s32 iVar2; + u16 *puVar3; + + puVar1 = D_8017F6D8; + iVar2 = func_80028D58(); + puVar3 = D_8017F6EC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + puVar1 = D_8017F6DC; + iVar2 = func_80028DE0(); + puVar3 = D_8017F6EC[iVar2]; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + + iVar2 = func_80028FBC(); + *(s16 *)(D_8017F6E0 + 0x18) = *D_8017F6F4[iVar2]; + iVar2 = func_80029000(); + *(s16 *)(D_8017F6E4 + 0x18) = *D_8017F6F4[iVar2]; + + puVar1 = D_8017F6E8; + iVar2 = func_80028D9C(); + puVar3 = D_8017F714[iVar2]; + *(s16 *)(puVar1 + 0x12) = *puVar3++; + *(s16 *)(puVar1 + 0x14) = *puVar3++; + *(s16 *)(puVar1 + 0x16) = *puVar3++; + *(s16 *)(puVar1 + 0x18) = *puVar3++; + *(s16 *)(puVar1 + 0x1a) = *puVar3++; + *(s16 *)(puVar1 + 0x1c) = *puVar3++; +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80140958); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80140D68); + + +// @class: struct +// @stuck: none — MATCH + + +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); + +void func_80140E6C(void) { + + extern unsigned char D_80078E7F; + extern unsigned char D_80078E7E; + extern unsigned char D_80078E7D; + extern M2C_UNK D_8017F614; + void *puVar1; + unsigned int uVar2; + unsigned int uVar3; + unsigned int uVar4; + + puVar1 = (*(void * *)&D_8017F614); + uVar2 = func_800D2CA8(D_80078E7F, 0x18); + uVar3 = func_800D2CA8(D_80078E7E, 0xc); + uVar4 = func_800D2CA8(D_80078E7D, 0); + func_800D2D10(uVar2 | 0xb00000 | uVar3 | 0xb00 | uVar4, 8, puVar1, 0); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (128/128 ins, match_one confirmed) + + +extern int func_80029FE4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern s32 func_8002A4FC(s32 a0); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); + +void func_80140F00(void) { + + extern short D_80115128; + extern u8 D_8017F624; + extern char *D_8017F644; + extern char *D_8017F648; + extern char *D_8017F64C; + extern char *D_8017F650; + extern char *D_8017F654; + char *p; + int r; + + if (D_80115128 == 0) { + p = (*(char * *)&D_8017F624); + r = func_800D2CA8(func_80029FE4() + 1, 0x18); + func_800D2D10(r, 2, p + 4, 1); + strcpy(p + 0xA, func_8002AAB4()); + + p = D_8017F644; + r = func_800D2CA8(func_8002A26C() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A2B0(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F648; + r = func_800D2CA8(func_8002A4B8() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(((int (*)(void))func_8002A4FC)(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F64C; + r = func_800D2CA8(func_8002A998() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A9DC(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F650; + r = func_800D2CA8(func_8002A728() + 1, 0x18); + func_800D2D10(r, 2, p + 0x12, 1); + r = func_800D2CA8(func_8002A76C(), 0x18); + func_800D2D10(r, 2, p + 0x22, -1); + + p = D_8017F654; + r = func_800D2CA8(func_80029FD4(), 4); + func_800D2D10(r, 7, p + 0x18, -1); + } +} + + + + +// @class: other +// @stuck: none — MATCH + + +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); + +int func_80141100(int param_1) +{ + + extern short D_80115128; + extern unsigned short D_80115172; + extern unsigned short D_8017F4DE; + extern unsigned short D_8017F4E2; + extern unsigned short D_8017F4E6; + extern unsigned short D_8017F4EA; + short sVar1; + int iVar7; + + if (D_80115128 == 0) { + iVar7 = D_80115172 + 0x31; + sVar1 = D_8017F4DE; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A1B4)(), func_8002A28C(), func_8002A27C(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F4E2; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A400)(), func_8002A4D8(), func_8002A4C8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F4E6; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A8E0)(), func_8002A9B8(), func_8002A9A8(), (short)iVar7, (int)sVar1); + sVar1 = D_8017F4EA; + param_1 = func_801412A8(param_1, ((short (*)(void))func_8002A670)(), func_8002A748(), func_8002A738(), (short)iVar7, (int)sVar1); + } + return param_1; +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801412A8); + +DEFINE_func_801415C0() /* dedup: shared engine-core @0x801415c0 (src/shared) */ + + +DEFINE_func_8014168C() /* dedup: shared engine-core @0x8014168c (src/shared) */ + + +DEFINE_func_801416D4() /* dedup: shared engine-core @0x801416d4 (src/shared) */ + + + + +void func_80141788(void) +{ + + extern unsigned short D_80115112; + extern void (*D_8017FA74[])(void); + D_8017FA74[D_80115112](); +} + + +DEFINE_func_801417C4() /* dedup: shared engine-core @0x801417c4 (src/shared) */ + + +DEFINE_func_801417F8() /* dedup: shared engine-core @0x801417f8 (src/shared) */ + + + +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); + + +void func_80141874(void) { + + extern u16 D_8011511E; + extern u16 D_8011511C; + extern unsigned short D_80115112; + extern u16 D_80115116; + extern void (*D_8017FA80[])(void); + register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 → store retires early */ + func_801754A8(); + D_8011511E = func_80014ED4(0); + D_8011511C = func_80015018(0); + fp = D_8017FA80[D_80115112]; + fp(); + func_80141C04(); + D_80115116 += 1; +} + + + + + + + + + +extern u16 D_80115110; +extern u16 D_80115112; +extern unsigned short D_80115118; +extern volatile u16 D_8011511A; +extern s16 D_80115128; +extern u16 D_8011512E; /* §17a-1: canonical width (jr_8013F350 TUs decl u16); byte-neutral here (only use is store-0) */ +extern s32 D_80115130; +extern u8 D_80115158[]; +extern u8 D_8011515C; + +extern void func_800D24A0(s32 a0); +extern s32 func_80029178(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); + +void func_801418F8(void) +{ + + extern s16 D_8011515A; + extern s16 D_8011515E; + extern s16 D_80115162; + extern s16 D_80115166; + extern u8 D_8017F698; + extern u8 D_8017F6B0; + extern u8 D_8017F724; + extern u8 D_8017F72C; + extern s16 D_8017F9F8; + extern s16 D_8017F9FA; + extern void *D_8018F198; + extern void *D_8018F19C; + u16 t; + + func_800D24A0(1); + D_8011511A = 2; + t = D_8011511A; + (*(s16 *)&D_80115118) = 0; + D_80115130 = 0; + if (t >= 4) { + D_8011511A = t - 3; + } + (*(s16 *)D_80115158) = 0x106; + if ((func_80029178(0x1C) & 0xFF) == 0) { + D_8018F198 = &D_8017F698; + D_8018F19C = &D_8017F724; + } else { + D_8018F198 = &D_8017F6B0; + D_8018F19C = &D_8017F72C; + } + D_8011515A = 0x104; + (*(s16 *)&D_8011515C) = 0x104; + D_8011515E = 0x129; + D_80115162 = 0x103; + D_80115166 = 0x105; + D_80115128 = 0; + D_8011512E = 0; + if (D_80115110 == 3) { + func_8002D4C8(0x46E, 0); + } else { + func_80141C0C(0); + } + D_80115128 = 1; + D_8017F9F8 = 0xE; + D_8017F9FA = 3; + D_80115112 = D_80115112 + 1; +} + + +/* func_80141A60 @ 0x80141A60 (0x130, 76 ins) -- ov_SC01_000 shared engine fn. + * + * ((s32 *)D_801151C8)[]: word (s32) table indexed by (u16)(*(u16 *)&D_800B9A02) -> D_801151D0. + * D_8011511A: u16, unsigned compare vs 4 (sltiu). + * (*(u8 *)&D_8011514C)/4D/5C: u8 fields; a1 = (s16)((*(u8 *)&D_8011514C) + D_8011514D*D_8011515C). + * D_80115130: cached s32 handle. D_8017F9FC: address-taken arg to func_801376E8. + * D_80115116: s16 <- 0xfff8 (ori, positive const). D_80115112: u16 counter. + */ + +extern s16 D_800B9A02; +extern u8 D_801151C8[]; +extern s32 D_801151D0; +/* D_8011511A: this TU declares it volatile at file scope -> a direct read reloads on every + * use; the cast-at-use *(u16 *)&D_8011511A strips volatile so gcc CSEs the three reads into + * one load (matches the single-load target). */ +extern s16 D_8011514C; +extern u8 D_8011515C; +extern s32 D_80115130; +extern u16 D_80115112; + +extern s32 func_8013F350(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern s32 func_8014032C(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_801376E8(int a0, int a1); +extern void func_80137B80(void); +extern s32 func_800D0EC4(void); + +void func_80141A60(void) +{ + + extern u8 D_8011514D; + extern u8 D_8017F9FC; + extern u16 D_80115116; + s32 iVar1; + s32 pad[2]; + (void)&pad; /* §36#3 frame-pad induction: force frame 0x20 (vs 0x18) */ + + D_801151D0 = ((s32 *)D_801151C8)[(*(u16 *)&D_800B9A02)]; + func_8013F350(); + if ((*(u16 *)&D_8011511A) >= 4) { + func_8013FAF8((*(u16 *)&D_8011511A), (*(u16 *)&D_8011511A) + 1); + } + func_8013FAF8(2, 3); + iVar1 = func_8014032C(2, (s16)((*(u8 *)&D_8011514C) + D_8011514D * D_8011515C)); + if (iVar1 != 0 && iVar1 != D_80115130) { + D_80115130 = iVar1; + func_80139954(); + func_801376E8(iVar1, (int)&D_8017F9FC); + } + func_80137B80(); + iVar1 = func_800D0EC4(); + if (iVar1 != 0) { + D_80115116 = 0xfff8; + D_80115112 = D_80115112 + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80141B90); + +void func_80141C04(void) { +} + + +// @class: struct +// @stuck: none — MATCH expected (indexed u16 global: (s16)param_1*2 + D_80115110, *2 array stride) + +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80141C0C(s32 param_1) +{ + + extern u16 D_80115110; + extern u8 D_8017F9D4; + func_8002D4C8(*(u16 *)(&D_8017F9D4 + (((param_1 << 16) >> 15) + (u32)D_80115110) * 2), 0); +} + + +DEFINE_func_80141C50() /* dedup: shared engine-core @0x80141c50 (src/shared) */ + + +DEFINE_func_80141CA4() /* dedup: shared engine-core @0x80141ca4 (src/shared) */ + + +DEFINE_func_80142414() /* dedup: shared engine-core @0x80142414 (src/shared) */ + + +DEFINE_func_80142454() /* dedup: shared engine-core @0x80142454 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (58 ins). STRUCT branch reconstruction + 3 levers: (1) §3-T4 branch-polarity +// invert in the ==0 arm so the func_8012C218 cold path sinks to the tail; (2) *(volatile int*) on +// the two extra param_1[0x32] reloads to defeat gcc CSE (gcc reloads via register reuse, not a store); +// (3) param_1[0x7e] pinned to $v1 (register __asm__("$3")) + an input-only scheduling barrier +// __asm__ __volatile__("" : : "r"(a)) on the 0xA read so the pinned load is anchored AFTER it in the +// ==0 arm (matches the load2-reused-as-$v1 ordering). + +extern void func_8012C218(void *a0); + +void func_801424E4(short *param_1) { + + extern void (*D_8017FAA4[])(void); + short sVar1; + int iVar2; + register unsigned short t __asm__("$3"); + + (*D_8017FAA4[(unsigned short)param_1[1]])(); + if (*(unsigned short *)param_1 != 0) { + if (param_1[0x38] != 0) { + iVar2 = *(int *)(param_1 + 0x32); + if (iVar2 == 0) { + return; + } + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + t = (unsigned short)param_1[0x7e]; + sVar1 = *(unsigned short *)(iVar2 + 10) + t; + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + } else { + unsigned short a; + iVar2 = *(int *)(param_1 + 0x32); + if ((iVar2 != 0) && (*(short *)(iVar2 + 0x36) == param_1[0x7f])) { + *(int *)(param_1 + 2) = *(int *)(iVar2 + 4); + a = *(unsigned short *)(*(volatile int *)(param_1 + 0x32) + 10); + __asm__ __volatile__("" : : "r"(a)); + t = (unsigned short)param_1[0x7e]; + sVar1 = a + t; + iVar2 = *(volatile int *)(param_1 + 0x32); + param_1[5] = sVar1; + *(int *)(param_1 + 6) = *(int *)(iVar2 + 0xc); + return; + } + ((void (*)(short *))func_8012C218)(param_1); + } + } + return; +} + + + + +void func_801425CC(void *a0) { + + extern void (*D_8017FAB4[])(void); + D_8017FAB4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: schedule +// @stuck: none — MATCH expected; CAE4 block fallthrough, AD50 block goto-tail + +extern void func_8012C1B8(void); +extern s32 func_8012C1DC(s32 a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012CAE4(void *a0); +extern s32 func_8012AD50(void *a0); + +void func_80142608(s32 param_1) +{ + + extern s32 D_8017FA98; + register s32 iVar1 __asm__("$16"); + + if (*(short *)(param_1 + 0x70) != 0) { + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + } else { + iVar1 = func_8012C1DC(*(s32 *)(param_1 + 100)); + } + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 != 0) { + func_8001CA1C(iVar1, (s32)&D_8017FA98); + *(short *)(iVar1 + 0x1a) = 0x200; + *(short *)(iVar1 + 0x18) = 0x200; + *(short *)(param_1 + 0xfc) = 0x40; + if (*(short *)(param_1 + 0x70) != 0) { + goto ad50; + } + if (*(s32 *)(param_1 + 100) != 0) { + *(short *)(param_1 + 0xfe) = *(short *)(*(s32 *)(param_1 + 100) + 0x36); + goto ad50; + } + } + ((void (*)(s32))func_8012CAE4)(param_1); + return; +ad50: + *(short *)(param_1 + 0x98) = 0; + *(s32 *)(param_1 + 0x90) = 0; + ((void (*)(s32))func_8012AD50)(param_1); +} + + +DEFINE_func_801426D4() /* dedup: shared engine-core @0x801426d4 (src/shared) */ + + +DEFINE_func_80142740() /* dedup: shared engine-core @0x80142740 (src/shared) */ + + +DEFINE_func_80142778() /* dedup: shared engine-core @0x80142778 (src/shared) */ + + +void func_801427DC(void) { +} + +void func_801427E4(void) { +} + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801427EC(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8017FAC8[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8017FAC8[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80142838); + +DEFINE_func_801428CC() /* dedup: shared engine-core @0x801428cc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_8014292C(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8017FAE4[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8017FAE4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_80142978(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8017FCB4[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8017FCB4[*(u16 *)(param_1 + 2)](); + } +} + + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + + +void func_801429C4(int param_1) +{ + + extern u16 D_801270C0; + extern void (*D_8017FD6C[])(); + if (*(s16 *)&D_801270C0 != 3) { + D_8017FD6C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80142A10); + + +// @class: struct +// @stuck: none — MATCH (packed-word struct -> lwl/lwr unaligned copy; union byte[] -> $sp-direct lbu; branch-polarity invert -> beqz) + + +void func_80142A80(void) +{ + + extern u16 D_800B99D8; + extern struct packed_word D_8018E880; + extern u8 D_8018F1A0; + extern u8 D_8018F1A1; + extern u8 D_8018F1A2; + u16 flags; + union word_bytes local; + s32 mul; + + flags = D_800B99D8; + local.pw = D_8018E880; + + if (flags & 0x10) { + mul = (s8)((flags & 0xf) >> 1) + 9; + } else { + mul = 0x10 - (s8)((flags & 0xf) >> 1); + } + + D_8018F1A0 = mul * (local.b[0] >> 4); + D_8018F1A1 = mul * (local.b[1] >> 4); + D_8018F1A2 = mul * (local.b[2] >> 4); +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80142B2C); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80142BB4); + +void func_80142C7C(void) { +} + +DEFINE_func_80142C84() /* dedup: shared engine-core @0x80142c84 (src/shared) */ + + +DEFINE_func_80142C9C() /* dedup: shared engine-core @0x80142c9c (src/shared) */ + + +DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142d38 (src/shared) */ + + +DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142db8 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142DC4(int param_1) +{ + + extern int D_8017FABC; + int v0; + + *(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)(); + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_8017FABC); + *(short *)(v0 + 0x1a) = 0x1800; + *(short *)(v0 + 0x18) = 0x1800; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); + + +void func_80142E38(int param_1) +{ + + extern unsigned char D_8017FAD8[]; + short sVar1; + int iVar2; + + *(int *)(param_1 + 0x20) = iVar2 = ((int (*)(void))func_8012C1B8)(); + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((void (*)(int, void *))func_8001CA1C)(iVar2, &D_8017FAD8); + sVar1 = (*(unsigned short *)(param_1 + 0x70) & 0xf) * 0x600 + 0x1200; + *(short *)(iVar2 + 0x1a) = sVar1; + *(short *)(iVar2 + 0x18) = sVar1; + *(short *)(param_1 + 0xfc) = 0; + ((void (*)(int))func_80142B2C)(param_1); + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_80142EC0(s32 param_1) { + + extern s32 D_8017FCA4[]; + register s32 d __asm__("$16") = param_1; /* $s0 */ + register s32 obj __asm__("$17"); /* $s1 */ + s32 ret; + s16 sVar2; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(d + 0x20) = ret; + obj = ret; + if (ret == 0) { + ((void (*)(s32))func_8012CAE4)(d); + } else { + func_8001CA1C(obj, 0); + sVar2 = (s16)((*(u16 *)(d + 0x70) & 0xf) * 0x600 + 0xc00); + *(s16 *)(obj + 0x1a) = sVar2; + *(s16 *)(obj + 0x18) = sVar2; + *(s16 *)(d + 0xfc) = 0; + ((void (*)(s32, s32))func_8012A828)(d, D_8017FCA4[*(u16 *)(d + 0x70) & 0xf]); + ((void (*)(s32))func_80142B2C)(d); + } +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80142F68); + +DEFINE_func_80142FFC() /* dedup: shared engine-core @0x80142ffc (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins). $16=param pin; explicit $17 copy of the call result +// survives across func_8001CA1C while $v0 serves the pre-call store/test; +// store BEFORE the s1 copy so the store keeps $v0 (not the saved copy). + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142B2C(void *arg0); + + +void func_8014305C(int param_1) +{ + + extern unsigned char D_8017FCC4[]; + extern unsigned char D_8017FD24[]; + register int s0_param __asm__("$16") = param_1; + register int s1_copy __asm__("$17"); + int iVar2; + short sVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(s0_param + 0x20) = iVar2; + s1_copy = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(s0_param); + } else { + ((void (*)(int, void *))func_8001CA1C)(s1_copy, D_8017FCC4); + sVar1 = (*(unsigned short *)(s0_param + 0x70) & 0xf) * 0x600 + 0xc00; + *(short *)(s1_copy + 0x1a) = sVar1; + *(short *)(s1_copy + 0x18) = sVar1; + *(short *)(s0_param + 0xfc) = 0; + func_8012A828(s0_param, D_8017FD24); + ((void (*)(int))func_80142B2C)(s0_param); + } +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801430F4); + +DEFINE_func_80143188() /* dedup: shared engine-core @0x80143188 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (memcpy unaligned copy; $s0 survivor pinned, store-before-copy keeps $v0 for early store/branch) + +extern void *memcpy(void *, const void *, u32); + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern s32 func_8012E504(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80142B2C(void *arg0); + + +void func_801431E8(s32 param_1) { + + extern u8 D_8018E87C; + extern u8 D_8018F1A0; + extern u8 D_8018F1A4; + u8 buf[8]; + s32 iVar5; + u16 uVar2; + s16 sVar4; + + register s32 d __asm__("$16"); + memcpy(buf, &D_8018E87C, 4); + iVar5 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar5; + d = iVar5; + if (iVar5 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + } else { + ((void (*)(s32, void *))func_8001CA88)(d, &D_8018F1A0); + uVar2 = *(u16 *)(param_1 + 0x70); + *(s16 *)(d + 0x76) = -0x10; + sVar4 = (uVar2 & 0xf) * 0x600 + 0xc00; + *(s16 *)(d + 0x1a) = sVar4; + *(s16 *)(d + 0x18) = sVar4; + *(u32 *)(d + 4) = *(u32 *)(d + 4) | 0x50000000; + if (func_8012E504(param_1, 0x33) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + func_800233CC(&D_8018F1A0, 0x10); + memcpy(&D_8018F1A4, buf, 4); + } else { + *(s16 *)(param_1 + 0xfc) = 0; + } + ((void (*)(s32))func_80142B2C)(param_1); + } +} + + +DEFINE_func_801432FC() /* dedup: shared engine-core @0x801432fc (src/shared) */ + + +DEFINE_func_80143390() /* dedup: shared engine-core @0x80143390 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801433F0); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_80143458(s32 param_1) +{ + + extern u8 D_800D387C[]; + extern u32 D_8017FE7C[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017FE7C[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014350C); + + +// @class: plumbing +// @stuck: none — MATCH (pending gate) + + +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +void func_8014358C(s32 param_1) +{ + + extern u8 D_8017FE8C[]; + extern u32 D_8017FF88[]; + s32 p; + u16 v; + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_8017FE8C; + + p = *(s32 *)(param_1 + 0x20); + if (*(s32 *)(p + 4) == 0) { + *(s32 *)(p + 4) = 0x50000000; + } + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x90; + + v = *(u16 *)(param_1 + 0x34) & 0x7fff; + if (v != 0) { + p = *(s32 *)(param_1 + 0x20); + *(u16 *)(p + 0x1a) = v; + *(u16 *)(p + 0x18) = v; + } + + func_80128EA8(*(u32 *)(param_1 + 0x20), param_1 + 0x24, + D_8017FF88[*(u16 *)(param_1 + 0x34) & 3]); + + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +DEFINE_func_80143640() /* dedup: shared engine-core @0x80143640 (src/shared) */ + + +DEFINE_func_801437D8() /* dedup: shared engine-core @0x801437d8 (src/shared) */ + + +DEFINE_func_80143970() /* dedup: shared engine-core @0x80143970 (src/shared) */ + + +DEFINE_func_80143994() /* dedup: shared engine-core @0x80143994 (src/shared) */ + + +DEFINE_func_801439C0() /* dedup: shared engine-core @0x801439c0 (src/shared) */ + + +DEFINE_func_801439FC() /* dedup: shared engine-core @0x801439fc (src/shared) */ + + + + +void func_80143B30(void *a0) { + + extern void (*D_8017FFA4[])(void); + D_8017FFA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143B6C() /* dedup: shared engine-core @0x80143b6c (src/shared) */ + + +DEFINE_func_80143BDC() /* dedup: shared engine-core @0x80143bdc (src/shared) */ + + + + +void func_80143C38(void *a0) { + + extern void (*D_8017FFB0[])(void); + D_8017FFB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143C74() /* dedup: shared engine-core @0x80143c74 (src/shared) */ + + + + +void func_80143C98(void *a0) { + + extern void (*D_8017FFB8[])(void); + D_8017FFB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80143CD4() /* dedup: shared engine-core @0x80143cd4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80143D28); + + + +void func_80143E68(void *a0) { + + extern void (*D_80180000[])(void); + D_80180000[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80143EA4(void) { +} + +void func_80143EAC(void) { +} + +void func_80143EB4(void) { +} + +DEFINE_func_80143EBC() /* dedup: shared engine-core @0x80143ebc (src/shared) */ + + + + +void func_80144054(void *a0) { + + extern void (*D_80180014[])(void); + D_80180014[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80144090); + +extern void func_8012C218(void *a0); + +// @class: struct +// @stuck: none — MATCH (relocation-masked match_one); fn-ptr dispatch table + 0x1c counter, sibling idiom (func_801427EC/func_80143B30) + + +void func_801442F8(int param_1) +{ + + extern void (*D_8018001C[])(); + int iVar1; + + D_8018001C[*(u16 *)(param_1 + 2)](); + iVar1 = *(int *)(param_1 + 0x1c) + 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (0x1d < iVar1) { + func_8012C218(param_1); + } +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +void func_80144364(int param_1) { + + extern u8 D_8017FF98; + int iVar3; + u16 uVar2; + s16 sVar1; + + iVar3 = ((s32 (*)(void))func_8012C194)(); + if (iVar3 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + uVar2 = *(u16 *)(*(int *)(param_1 + 0x64) + 0x36); + *(int *)(param_1 + 0xCC) = iVar3; + *(u16 *)(param_1 + 0xFC) = uVar2; + func_8001CB6C((u8 *)iVar3, (s32)&D_8017FF98, 0x250, 0x1A0); + *(s32 *)(iVar3 + 4) = 0x60000000; + *(u8 *)(iVar3 + 0x27) = 0x14; + *(u16 *)(iVar3 + 0x10) = 0x400; + *(u16 *)(iVar3 + 8) = *(u16 *)(*(int *)(param_1 + 0x64) + 6); + *(u16 *)(iVar3 + 0xA) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xA); + *(u16 *)(iVar3 + 0xC) = *(u16 *)(*(int *)(param_1 + 0x64) + 0xE); + sVar1 = *(s16 *)(param_1 + 0x70); + if (sVar1 != 0) { + *(s16 *)(iVar3 + 0x1A) = sVar1; + *(s16 *)(iVar3 + 0x18) = sVar1; + } else { + *(u16 *)(iVar3 + 0x1A) = 0x2000; + *(u16 *)(iVar3 + 0x18) = 0x2000; + } + *(u16 *)(param_1 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80144458); + +DEFINE_func_80144558() /* dedup: shared engine-core @0x80144558 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014462C); + +DEFINE_func_801446A4() /* dedup: shared engine-core @0x801446a4 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (65 ins, match_one). Levers: uVar2/$2 + addr/$3 pins; split (uVar2&0xFFFFFFF) into addr then (addr|0x80000000)+8 deref; %hi/%lo of 0x80000008 via plain 0x80000000+8 (match_one masks the target's D_80000008 reloc, real bytes identical); v1/3 magic-divide; gv+fv reassoc (field-0x30 in own temp) loads field first +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); + +void func_8014477C(void *param_1) { + + extern u8 D_8017FFC0; + extern u8 D_8017FFCC; + s32 v0; + s32 v1; + register s32 uVar2 __asm__("$2"); + register s32 addr __asm__("$3"); + s32 gv; + s32 fv; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + ((void (*)(s32, void *))func_8001CA1C)(v0, &D_8017FFC0); + if (*(u16 *)(*(s32 *)((s32)param_1 + 0x64)) != 0) { + *(s16 *)((s32)param_1 + 0xFC) = *(u16 *)(*(s32 *)((s32)param_1 + 0x64) + 0x36); + uVar2 = *(s32 *)(*(s32 *)((s32)param_1 + 0x64) + 0x58); + if (uVar2 != 0) { + addr = uVar2 & 0xFFFFFFF; + gv = *(u16 *)((addr | 0x80000000) + 8); + fv = *(u16 *)((s32)param_1 + 0xA) - 0x30; + *(u16 *)((s32)param_1 + 0xA) = gv + fv; + } else { + *(u16 *)((s32)param_1 + 0xA) = *(u16 *)((s32)param_1 + 0xA) - 0x60; + } + } + ((void (*)(void *, void *))func_8012A828)(param_1, &D_8017FFCC); + v1 = (s32)*(s16 *)((s32)param_1 + 0x70) << 0xC; + *(s16 *)((s32)param_1 + 0x2) = 1; + *(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = v1 / 3; + *(s32 *)((s32)param_1 + 0x1C) = 0x78; +} + + + +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + + +void func_80144880(s32 param_1) +{ + + extern u8 D_8017FF98; + extern u8 D_80180008; + register s32 obj __asm__("$16"); /* $s0 */ + register s32 self __asm__("$17") = param_1; /* $s1 */ + register s32 b __asm__("$2"); /* $v0 */ + s32 e; + + obj = ((s32 (*)(void))func_8012C194)(); + if (obj == 0) { + ((void (*)(s32))func_8012CAE4)(self); + } else { + *(u16 *)(self + 0xFC) = *(u16 *)(*(s32 *)(self + 0x64) + 0x36); + *(s32 *)(self + 0xCC) = obj; + if (*(s16 *)(self + 0x70) == 1) { + func_8001CB6C((u8 *)obj, (s32)&D_8017FF98, 0x250, 0x1A0); + b = 0x14; + } else { + func_8001CB6C((u8 *)obj, (s32)&D_80180008, 0x300, 0x1D0); + b = 0x6A; + } + *(u8 *)(obj + 0x27) = (u8)b; + *(s32 *)(obj + 4) = 0x60000000; + *(u16 *)(obj + 0x10) = 0x400; + *(u16 *)(obj + 8) = *(u16 *)(*(s32 *)(self + 0x64) + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(*(s32 *)(self + 0x64) + 0xA); + e = *(u16 *)(*(s32 *)(self + 0x64) + 0xE); + *(u16 *)(obj + 0x1A) = 0x4000; + *(u16 *)(obj + 0x18) = 0x4000; + *(u16 *)(obj + 0xC) = (u16)e; + *(s16 *)(self + 2) = *(s16 *)(self + 2) + 1; + } +} + + +DEFINE_func_80144988() /* dedup: shared engine-core @0x80144988 (src/shared) */ + + + + +void func_801449C8(void *a0) { + + extern void (*D_80180024[])(void); + D_80180024[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A04() /* dedup: shared engine-core @0x80144a04 (src/shared) */ + + + + +void func_80144A2C(void *a0) { + + extern void (*D_8018002C[])(void); + D_8018002C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80144A68() /* dedup: shared engine-core @0x80144a68 (src/shared) */ + + +void func_80144A90(void) { +} + +DEFINE_func_80144A98() /* dedup: shared engine-core @0x80144a98 (src/shared) */ + + +DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80144B14); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80144B9C); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801457A4); + +void func_801458E0(void) { +} + +DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80180BB8 block defeats the tail-merge of the two identical D_80180BB8 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145934(void) { + + extern u8 D_80180BB8; + extern u8 D_80180B28; + extern u8 D_80180B04; + extern u8 D_80180AE0; + extern u8 D_80180B94; + extern u8 D_80180B70; + extern u8 D_80180B4C; + extern u8 D_80180ABC; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_80180BB8; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80180BB8 load from being + * tail-merged with the v>=0x384 D_80180BB8 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_80180B28; + } else if (v >= 0x578) { + p = &D_80180B04; + } else if (v >= 0x514) { + p = &D_80180AE0; + } else if (v >= 0x384) { + p = &D_80180BB8; + } else if (v >= 0x258) { + p = &D_80180B94; + } else if (v >= 0xC8) { + p = &D_80180B70; + } else if (v >= 0xA) { + p = &D_80180B4C; + } else { + p = &D_80180ABC; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80180C48 block defeats the tail-merge of the two identical D_80180C48 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145A2C(void) { + + extern u8 D_80180C48; + extern u8 D_80180B28; + extern u8 D_80180B04; + extern u8 D_80180AE0; + extern u8 D_80180C24; + extern u8 D_80180C00; + extern u8 D_80180BDC; + extern u8 D_80180ABC; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_80180C48; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80180C48 load from being + * tail-merged with the v>=0x384 D_80180C48 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_80180B28; + } else if (v >= 0x578) { + p = &D_80180B04; + } else if (v >= 0x514) { + p = &D_80180AE0; + } else if (v >= 0x384) { + p = &D_80180C48; + } else if (v >= 0x258) { + p = &D_80180C24; + } else if (v >= 0xC8) { + p = &D_80180C00; + } else if (v >= 0xA) { + p = &D_80180BDC; + } else { + p = &D_80180ABC; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + +DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ + + +DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ + + +DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80145CEC); + + + +// @class: schedule +// @stuck: branch layout — 3-way dispatch on param_1; trying switch form + +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); + + +void func_80145EE8(s32 param_1) +{ + + extern unsigned char D_80180040[]; + extern unsigned char D_80180070[]; + extern unsigned char D_801800C0[]; + extern unsigned char D_801800F0[]; + extern unsigned char D_80180120[]; + switch (param_1) { + case 0: + if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { + ((void (*)(void *))func_80146014)(D_80180040); + } + if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { + ((void (*)(void *))func_80146014)(D_80180070); + } + if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { + ((void (*)(void *))func_80146014)(D_801800C0); + } + if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { + ((void (*)(void *))func_80146014)(D_801800F0); + } + if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { + return; + } + ((void (*)(void *))func_80146014)(D_80180120); + break; + case 1: + ((void (*)(void *))func_80146014)(D_80180040); + ((void (*)(void *))func_80146014)(D_80180070); + ((void (*)(void *))func_80146014)(D_801800C0); + ((void (*)(void *))func_80146014)(D_801800F0); + ((void (*)(void *))func_80146014)(D_80180120); + break; + } +} + + +DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ + + +void func_80146074(void) { +} + + +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); + +void func_8014607C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146128\n" + "lui $at, %%hi(D_8018F1E0)\n" + "sw $v0, %%lo(D_8018F1E0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8018F1E0)\n" + "lw $v0, %%lo(D_8018F1E0)($v0)\n" + "nop\n" + "beqz $v0, .L80146114\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146360\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_801463A0\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + ".L80146114:\n" + "nop\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_80146128() /* dedup: shared engine-core @0x80146128 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (fnptr-table idiom: D_80180170[u8 idx](&arg)) + +void func_80146360(void) +{ + + extern void (*D_80180170[])(void *); + extern u8 D_80126BA4; + extern s32 D_80126B58; + D_80180170[D_80126BA4](&D_80126B58); +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801463A0); + +DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ + + +DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ + + +DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ + + +DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ + + +DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ + + +DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ + + +DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ + + +DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801466F0); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80146750); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014680C); + +DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ + + +DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ + + +DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ + + +DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80146A6C); + +DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80146AFC); + +DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ + + +DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ + + +DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ + + +DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ + + +DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ + + +DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ + + +DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ + + +DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ + + +DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ + + +DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ + + +DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ + + +DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ + + +DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ + + +DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ + + +DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80146F58); + +DEFINE_func_80146FC4() /* dedup: shared engine-core @0x80146fc4 (src/shared) */ + + +DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ + + +DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ + + +DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ + + +DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ + + +DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ + + +DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ + + +DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ + + +DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ + + +DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ + + +DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ + + +DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ + + +DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ + + +DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ + + +DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ + + +DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ + + +DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ + + +DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ + + +DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ + + +DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ + + +DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ + + +DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80147364); + +DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ + + +DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ + + +DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ + + +DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ + + +DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ + + +DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ + + +DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ + + +DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ + + +DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ + + +DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ + + +DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ + + +DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ + + +DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ + + +DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ + + +DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ + + +DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ + + +DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ + + +DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ + + +DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ + + +DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ + + +DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ + + +DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ + + +DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ + + +DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ + + +DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ + + +DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ + + +DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ + + +DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ + + +DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ + + +DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ + + +DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ + + +DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ + + +DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ + + +DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ + + +DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ + + +DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801483E8); + +DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ + + +DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ + + +DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ + + +DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ + + +DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ + + +DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ + + +DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ + + +DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ + + +DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ + + +DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ + + +DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ + + +DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ + + +DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ + + +DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ + + +DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ + + +DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ + + +DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ + + +DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg + +extern s32 ratan2(s32 a0, s32 a1); + +int func_80148AFC(void *a0) { + + extern s32 D_801151D4; + extern ActorFn D_80180178[]; + s32 p = (s32)a0; + s32 iVar5 = *(s32 *)(p + 0x20); + register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 sVar3; + u8 bVar1; + __asm__("" : "=r"(tmp) : "0"(tmp)); + sVar3 = tmp; + bVar1 = *(u8 *)(p + 0xA9); + + switch (bVar1) { + case 0x41: + return D_80180178[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; + case 0x53: + case 0x73: + { + register u32 bb __asm__("$3"); + register s32 c80 __asm__("$2") = 0x80; + register s32 lo __asm__("$4"); + register s32 hi __asm__("$2"); + bb = *(u16 *)(p + 0xAE); + lo = bb & 0xFF; + if (lo != c80 || (hi = bb >> 8) != 0x80) { + s32 sVar4; + __asm__ __volatile__("" : : : "memory"); + sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); + *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; + return 1; + } + return 0; + } + } +} + + +DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ + + +DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ + + +DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ + + +DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ + + +DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ + + +DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ + + +DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ + + +DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ + + +DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ + + +DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ + + +DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ + + +DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ + + +DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ + + +DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ + + +DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ + + +DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (68 ins) +extern s32 ratan2(s32 a0, s32 a1); + +s32 func_80148D44(void) { + + extern s32 D_801151D4; + extern u8 D_80126C01; + extern u16 D_80126C02; + extern u16 D_80126C06; + extern s32 D_801801B8[]; + register s32 ang __asm__("$16"); + register s32 a __asm__("$4"); + s32 p; + s32 res; + s32 d; + + p = D_801151D4; + a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), + *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; + d = (s32)D_80126C01; + __asm__ __volatile__("" : : "r"(a)); + ang = a; + if (d == 0x53) { + goto final; + } + if (d < 0x54) { + if (d == 0x41) { + goto call; + } + return 0x41; + } + if (d != 0x73) { + return 0x73; + } + goto final; +call: + return (s32)(s16)((s16 (*)())(D_801801B8[D_80126C02 >> 0xc]))(); +final: + { + u32 e = D_80126C06; + if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { + return -1; + } + __asm__ __volatile__("" : : : "memory"); + res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; + } + return res; +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80148E54); + +DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ + + +DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ + + +DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ + + +DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ + + +DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ + + +DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ + + +DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ + + +DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ + + +DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ + + +DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ + + +DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ + + +DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ + + +DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ + + +DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ + + +DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ + + +DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ + + +DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ + + +DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ + + +DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ + + +DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ + + +DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ + + +DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ + + +DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ + + +DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ + + +DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ + + +DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ + + +DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ + + +DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ + + +DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ + + +DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ + + +DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ + + +DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ + + +DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80149350); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80149374); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801493D0); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014942C); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80149450); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801494CC); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80149544); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80149584); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801495C4); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014964C); + +DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ + + +DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ + + +DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ + + +DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ + + +DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801497A8); + +DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ + + +DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ + + +DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ + + +DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80149954); + +DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ + + +DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ + + +DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ + + +DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ + + +DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ + + +DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ + + +DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ + + +DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ + + +DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ + + +DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ + + +DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ + + +DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ + + +DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ + + +DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ + + +DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80149F2C); + +void func_80149FA8(void) { +} + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins) +extern s16 currentLocationId; + +s32 func_80149FB0(s32 a0) { + + extern s32 D_80180238[]; + extern u8 D_80078E78[]; + s32 *p = &D_80180238[0]; + register s32 v __asm__("$3") = *p; + u8 *q = &D_80078E78[0]; + s32 loc; + + if (v != 0) { + loc = currentLocationId; + p = p + 1; + do { + if (loc == v) { + goto ret0; + } + v = *p; + p = p + 1; + } while (v != 0); + } + + if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { + return 0; + } + if (*(s16 *)(a0 + 0x1C8) != 0) { + return 0; + } + if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { + ret0: + return 0; + } + v = q[0x48]; + q[0x48] = v ^ 0x80; + return 1; +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014A048); + +DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ + + +DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ + + +DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ + + +DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ + + +DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ + + +DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ + + +DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ + + +DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ + + +DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014A51C); + +DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ + + +DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ + + +DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ + + +DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ + + +DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ + + +DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ + + +DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ + + +DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014A738); + +DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ + + +DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ + + +DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ + + +DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ + + +DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ + + +DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ + + +DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ + + +DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ + + +DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ + + +DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ + + +DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ + + +DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ + + +DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ + + +DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ADE0 (src/shared) */ + +DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ + + +DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ + + +DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ + + +DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ + + +DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ + + +DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ + + +DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ + + +DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ + + +DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ + + +DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ + + +DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ + + +DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ + + +DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ + + +DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ + + +DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ + + +DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ + + +DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ + + +DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ + + +DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ + + +DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ + + +DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ + + +DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ + + +DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ + + +DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ + + +DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ + + +DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ + + +DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ + + +DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ + + +DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ + + +DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ + + +DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ + + +DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ + + +DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ + + +DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ + + +DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ + + +DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ + + +DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ + + +void func_8014BDE0(void) { +} + +DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ + + +DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ + + +DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ + + +DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ + + +DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ + + +DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ + + +DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ + + +DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ + + +DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ + + +DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ + + +DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ + + +DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ + + +DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ + + +DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ + + +DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ + + +DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ + + +DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ + + +DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014C1A0); + +DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ + + +DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ + + +DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ + + +DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ + + +DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ + + +DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ + + +DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014C4AC); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014C568); + +DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ + + + +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); + +s16 func_8014C5D0(s32 a0, s32 a1) { + + extern u8 D_801802C8; + return func_8014C5FC(a0, a1, &D_801802C8); +} + + +DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ + + +DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ + + +DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ + + +DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ + + +DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014C6F4); + +DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ + + +DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ + + +DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ + + +DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ + + +DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ + + +DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ + + +DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ + + +DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ + + +DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ + + +DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ + + +DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ + + +DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ + + +DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ + + +DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ + + +DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ + + +DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ + + +DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ + + +DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ + + +DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ + + +DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ + + +DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ + + +DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ + + +DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ + + +DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014CBE8); + +DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ + + +DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ + + + +extern void func_8014CD0C(u8 *a0); + +void func_8014CCB4(void) +{ + + extern int D_8018F1E8; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014CD0C\n" + "lui $at, %%hi(D_8018F1E8)\n" + "sw $v0, %%lo(D_8018F1E8)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8018F1E8)\n" + "lw $v0, %%lo(D_8018F1E8)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014CD80); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014CF04); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D04C); + +DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D12C); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D2A0); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D3E0); + +DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D4C0); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D610); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D738); + +DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014D820); + +DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ + + +DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014DF3C); + +DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ + + +DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ + + +DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014E284 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014E434); + +DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ + + +DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014E5B4); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014E6A0); + +DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ + + +DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ + + +DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014E934); + +DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ + + +DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014ED28); + +DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ + + +DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014F1F4); + +DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ + + +DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014F3E8); + + +extern void func_8014F4C0(u8 *a0); + +void func_8014F468(void) +{ + + extern int D_8018F1EC; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F4C0\n" + "lui $at, %%hi(D_8018F1EC)\n" + "sw $v0, %%lo(D_8018F1EC)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8018F1EC)\n" + "lw $v0, %%lo(D_8018F1EC)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014F4C0); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014F6F4); + +DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ + + + +// @class: other +// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_8018F1EC; maspsx auto-fills jal delay slot) + +extern s32 func_8014FA70(s32 a0); + +void func_8014FA04(s32 a0) +{ + + extern s32 D_8018F1EC; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "sw $ra, 16($sp)\n" + "lw $v0, 68($a0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 1f\n" + "addu $v0, $zero, $zero\n" + "lui $a1, 0x1f80\n" + "ori $a1, $a1, 0x03fc\n" + "addu $t0, $a1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "lui $at, %%hi(D_8018F1EC)\n" + "sw $v0, %%lo(D_8018F1EC)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8018F1EC)\n" + "lw $v0, %%lo(D_8018F1EC)($v0)\n" + "1:\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014FBC0); + +DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014FCFC); + +DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ + + +DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014FE60); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014FFDC); + +DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ + + +DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801502EC); + +DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80150480); + +DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ + + +DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ + + +DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801506A4); + +DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ + + +DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ + + +DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ + + +DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ + + + +extern s32 func_80021174(s32 a0, s32 a1); + +s32 func_8015094C(s32 param_1) { + + extern S16 D_8018E884; + extern s32 D_801802F8; + extern s32 D_80126990; + extern s32 D_80126994; + extern u8 D_80126948[]; + struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ + S16 local; /* 0x10 @ 0x40 */ + s32 pad1[4]; /* 0x10 @ 0x50 */ + register u8 *cam __asm__("$17") = D_80126948; + s32 ret; + + local = D_8018E884; + arg.x = *(short *)(param_1 + 6); + arg.mid = D_80126994; + arg.y = *(short *)(param_1 + 0xe); + ret = func_80021174(D_801802F8, (s32)&arg); + if (ret == 0) { + { + short cur = *(short *)(param_1 + 6); + s32 diff = D_80126990 - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + { + short cur = *(short *)(param_1 + 0xe); + s32 diff = *(s32 *)(cam + 0x50) - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + (void)&pad1; + return 1; + } + return 0; +} + + + +extern s32 func_8014FA70(s32 a0); +extern void func_80015978(s32 a0, s32 *a1); + +void func_80150A70(s32 a0) +{ + + extern s32 D_8018F1EC; + __asm__ __volatile__( + ".set\tnoreorder\n" + "addiu $sp, $sp, -24\n" + "sw $s0, 16($sp)\n" + "addu $s0, $a0, $zero\n" + "sw $ra, 20($sp)\n" + "lh $v1, 6($s0)\n" + "lh $v0, 136($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 10($s0)\n" + "lh $v0, 138($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 14($s0)\n" + "lh $v0, 140($s0)\n" + "nop\n" + "beq $v1, $v0, 3f\n" + "nop\n" + "1:\n" + "lw $v0, 68($s0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 2f\n" + "addiu $a0, $s0, 4\n" + "lui $a2, 0x1f80\n" + "ori $a2, $a2, 0x03fc\n" + "addu $t0, $a2, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "addu $a0, $s0, $zero\n" + "lui $at, %%hi(D_8018F1EC)\n" + "sw $v0, %%lo(D_8018F1EC)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "addiu $a0, $s0, 4\n" + "2:\n" + "jal func_80015978\n" + "addiu $a1, $s0, 136\n" + "3:\n" + "lw $ra, 20($sp)\n" + "lw $s0, 16($sp)\n" + "addiu $sp, $sp, 24\n" + ".set\treorder\n" + : : : "memory"); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) + + +void func_80150B28(int param_1) { + + extern s32 D_800AE6B0; + extern void (*D_801802FC[])(void); + u32 idx; + register u32 sub __asm__("$2"); + + if ((D_800AE6B0 & 0x80FFFFFF) == 0) { + idx = *(u16 *)(param_1 + 0x16C); + if (idx != 0 && idx < 0x26) { + sub = idx - 1; + D_801802FC[sub](); + } + } + *(u16 *)(param_1 + 0x16C) = 0; +} + + +void func_80150B9C(void) { +} + +DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ + + +DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ + + +DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ + + +DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ + + +DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ + + +DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ + + +DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ + + +DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ + + +DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ + + +DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ + + +DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ + + +DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ + + +DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ + + +DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ + + +DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ + + +DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ + + +DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ + + +DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ + + +DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ + + +DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ + + +DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ + + +void func_80150F78(void) { +} + +DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ + + +DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ + + +DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ + + +DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ + + +DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ + + +DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ + + +DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ + + +void func_801510B8(void) { +} + +void func_801510C0(void) { +} + +DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ + + +DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ + + +DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ + + +void func_80151130(void) { +} + +DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ + + +DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ + + +DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ + + +DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ + + +DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ + + +DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ + + +DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ + + +DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ + + +DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ + + +DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80151664); + +DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ + + +DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ + + +DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ + + +void func_80151878(void) { +} + +DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ + + +DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ + + +DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80151944); + +DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ + + +DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ + + +DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80151B98); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80151C54); + + + +void func_80151D24(void *a0) { + + extern void (*D_801803A0[])(void); + D_801803A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ + + +DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ + + +DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ + + +DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ + + +DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ + + +DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ + + + + +void func_80152058(void *a0) { + + extern void (*D_801803C4[])(void); + D_801803C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); + +void func_801520DC(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_801803B4; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_801472C8(arg0); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_801803B4); + func_801477E8(arg0, 0x40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); + func_80147324(0x441); + func_80146CA0(arg0); +} + + +DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ + + +DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ + + +DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801470AC(s32 *a0); +extern void func_801472B4(void *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80153C18(); +void func_801522CC(s32 a0) { + s32 v1; + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + func_80154A74(a0, 0x11); + func_801553C0(a0); + func_801470AC((s32 *)a0); + func_801472B4((void *)a0); + v1 = *(s32 *)(a0 + 0x20); + *(s16 *)(a0 + 0x3E) = 0; + *(s16 *)(a0 + 0x40) = 0; + *(s16 *)(a0 + 0x42) = 0; + *(u8 *)(a0 + 0xDD) = 0; + *(u16 *)(a0 + 0x3C) = *(u16 *)(a0 + 0x3C) & 0xFFFE; + *(s16 *)(v1 + 0x10) = 0; + *(u16 *)(a0 + 0x60) = 0x1000; + *(u16 *)(a0 + 0x62) = 0x1000; + *(u16 *)(a0 + 0x64) = 0x1000; + func_801477E8((s32 *)a0, 0); + func_80153C18(a0); +} + + + + +void func_80152370(void *a0) { + + extern void (*D_801803D8[])(void); + D_801803D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (67 ins) + +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80019064(void *a0); +extern int func_80151204(int arg, int a1); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + + +void func_801523F4(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern s32 D_800D58AC; + extern u8 D_801803E4[]; + s32 pad[4]; + s32 buf[4]; + register s32 s0a __asm__("$16"); /* $s0 = buf */ + register s32 s2a __asm__("$18") = (s32)&D_801803E4; /* $s2 = &D_801803E4 */ + + ((void (*)(s32, s32))func_80146E90)(arg0, 0); + func_80019064(&D_80062C04); + ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); + if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), + (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); + } else { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); + } + func_80154A74(arg0, 0x16); + ((void (*)(s32))func_80149020)(arg0); + s0a = (s32)buf; + ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, + s2a, s0a); + ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); + ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); + func_80147324(0x451); + ((void (*)(s32))func_80146CA0)(arg0); + (void)pad; +} + + +DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ + + +DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ + + + + +void func_80152698(void *a0) { + + extern void (*D_801803F4[])(void); + D_801803F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ + + +DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ + + +DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ + + + + +void func_8015282C(void *a0) { + + extern void (*D_8018040C[])(void); + D_8018040C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_801528B0(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_801803FC; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_801803FC); + func_801477E8(arg0, 0xFFF00000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ + + +DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ + + +DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ + + +DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ + + + + +void func_80152B6C(void *a0) { + + extern void (*D_80180420[])(void); + D_80180420[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ + + +DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ + + +DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ + + +DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ + + + + +void func_80152D24(void *a0) { + + extern void (*D_8018043C[])(void); + D_8018043C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_80152DA8(s32 arg0) +{ + + extern s32 D_80062C14; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_8018042C; + func_80019064(&D_80062C14); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + M2C_FIELD(arg0, s8 *, 0xDF) = 8; + func_80146DB8(arg0, &D_8018042C); + func_801477E8(arg0, 0xFFE40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ + + +DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ + + +DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ + + +DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ + + + + +void func_80153060(void *a0) { + + extern void (*D_80180450[])(void); + D_80180450[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ + + +DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ + + +DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ + + +DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ + + +DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ + + +DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ + + + + +void func_80153320(void *a0) { + + extern void (*D_80180464[])(void); + D_80180464[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ + + +DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ + + +DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ + + +DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ + + +DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ + + +DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ + + +extern void func_80146D90(s32 a0); +extern void func_8014CC28(s32 a0); +extern void func_8014ED28(s32 _arg0); +extern void func_8014FA04(s32 a0); + +s32 func_801535F4(void *arg0) { + s32 var_s1; + register u32 flags __asm__("$4"); + register u32 fcopy __asm__("$3"); + s32 ret; + + var_s1 = 0; + if (((s32 (*)(void))func_8014ED28)() != 0) { + func_80146D90((s32)arg0); + } + if ((*(s32 *)((u8 *)arg0 + 0x34) > 0) && + (((s32 (*)(s32))func_8014CC28)((s32)arg0) != 0)) { + var_s1 = 1; + } + flags = ((s32 (*)(s32))func_8014FA04)((s32)arg0); + fcopy = flags; + if (flags & 0x4000) { + ret = 2; + } else if (flags & 0x2000) { + ret = 1; + } else { + ret = 4; + if ((fcopy & 0x8000) == 0) { + ret = var_s1; + } + } + __asm__ __volatile__("" : : "r"(flags)); + return ret; +} + + +DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ + + +DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ + + +DEFINE_func_80153800() /* dedup: shared engine-core @0x80153800 (src/shared) */ + + +DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ + + +DEFINE_func_801539F8() /* dedup: shared engine-core @0x801539f8 (src/shared) */ + + +DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ + + +DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ + + +DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ + + +DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ + + +DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ + + +DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ + + +DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ + + +DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ + + +DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ + + +DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls +extern void func_80019064(void *a0); + +void func_80153CCC(S80153CCC *a0) { + + extern s32 D_80180478; + extern void (*D_801804A0[])(void *a0); + extern s16 D_8011DB0C; + extern u16 D_8011F748; + ((s32 (*)(s32))func_80019064)((s32)&D_80180478); + D_801804A0[a0->idx](a0); + D_8011DB0C = 0; + D_8011F748 = 0; +} + + +DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (33/33) + +extern void func_80147324(s32 arg0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_80146CA0(void *a0); +extern s16 currentLocationId; + +void func_80153D7C(s32 param_1) +{ + + extern u8 D_80180480; + func_80147324(0x451); + func_80154274((s32 *)param_1, (s32)&D_80180480); + func_80149020((s32 *)param_1); + *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); + *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); + *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); + if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; + else *(u8 *)(param_1 + 0xde) = 10; + *(u8 *)(param_1 + 0xdf) = 0; + __asm__ __volatile__("" ::: "memory"); + func_80146CA0((void *)param_1); +} + + +DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ + + +DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ + + +DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ + + +DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ + + +DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ + + +DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ + + +DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ + + +DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ + + +DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ + + +DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ + + +DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ + + +DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ + + +DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8015444C); + +INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_801549F8); + +DEFINE_func_80154A74() /* dedup: shared engine-core @0x80154a74 (src/shared) */ + + +DEFINE_func_80154AB4() /* dedup: shared engine-core @0x80154ab4 (src/shared) */ + + +DEFINE_func_80154AE0() /* dedup: shared engine-core @0x80154ae0 (src/shared) */ + + +DEFINE_func_80154B20() /* dedup: shared engine-core @0x80154b20 (src/shared) */ + + +DEFINE_func_80154B4C() /* dedup: shared engine-core @0x80154b4c (src/shared) */ + + +DEFINE_func_80154B7C() /* dedup: shared engine-core @0x80154b7c (src/shared) */ + + +DEFINE_func_80154B98() /* dedup: shared engine-core @0x80154b98 (src/shared) */ + + +DEFINE_func_80154BC8() /* dedup: shared engine-core @0x80154bc8 (src/shared) */ + + +DEFINE_func_80154BE4() /* dedup: shared engine-core @0x80154be4 (src/shared) */ +